Ce face unpack
unpack face inversul lui pack: citește datele binare și returnează un tablou cu valorile. În format, fiecare literă poate fi urmată de un nume, iar elementele se separă cu /: "Nid/ncantitate" dă cheile id și cantitate.
Fără nume, cheile sunt numerotate de la 1, nu de la 0. Cu * după literă citești toate valorile rămase, de exemplu "C*" pentru toți octeții.
Parametri
| Parametru | Descriere |
|---|---|
$format |
Formatul, cu nume opționale pentru fiecare valoare. |
$string |
Datele binare. |
$offset |
Opțional. Poziția de la care începe citirea. |
Ce returnează
Un tablou cu valorile sau false la eroare.
Exemple
Exemplul 1: Valori cu nume
<?php
$date = pack("NnA8", 1024, 3, "Iasi");
print_r(unpack("Nid/ncantitate/A8oras", $date));
Rezultat
Array
(
[id] => 1024
[cantitate] => 3
[oras] => Iasi
)
Exemplul 2: Dimensiunile unei imagini PNG
Într-un fișier PNG, lățimea și înălțimea sunt numere pe 4 octeți, de la poziția 16.
<?php
$png = "\x89PNG\r\n\x1a\n" . pack("N", 13) . "IHDR" . pack("NN", 800, 600);
$dim = unpack("Nlatime/Ninaltime", $png, 16);
echo $dim["latime"] . " x " . $dim["inaltime"];
Rezultat
800 x 600
Greșeli frecvente
- Citești
unpack("C*", $date)[0]și primeștiUndefined array key 0. Cheile fără nume încep de la 1.
Comenzi înrudite
pack: Transformă valori în date binare după un format, de exemplu un număr pe 4 octeți.fread: Citește un număr dat de octeți dintr-un fișier deschis.bin2hex / hex2bin: bin2hex transformă un text (sau date binare) în cifre hexazecimale, iar hex2bin face inversul.