(PHP 4, PHP 5, PHP 7, PHP 8)
unpack — Déconditionne des données depuis une chaîne binaire
Description
unpack(string
$format
, string
$string
, int
$offset
= 0): array|false
Les données déconditionnées sont stockées dans un
tableau. Pour cela, il faut donner un nom à chaque
format utilisé et les séparer par des slash (/). Si
un argument de répétition est présent, alors chacune des
clés du tableau aura un numéro de séquence derrière le
nom fourni.
Des modifications ont été effectuées pour aligner le comportement
de cette fonction avec Perl :
-
Le code "a" ne supprime plus les octets NULL finaux.
-
Le code "A" supprime maintenant tous les espaces blancs ASCII finaux
(espace, tabulation, nouvelles lignes, retour à la ligne, et octets NULL).
-
Le code "Z" a été ajouté pour les chaînes complétées par des caractères
NULL, et supprime les octets NULL finaux.
Liste de paramètres
-
format
-
Voir la fonction pack() pour une explication des codes de format.
-
string
-
Les données conditionnées.
-
offset
-
La position où débuter le déconditionnement.
Valeurs de retour
Retourne un tableau associatif contenant les éléments déconditionnés
d'une chaîne binaire, ou false
si une erreur survient.
Historique
Exemples
Exemple #1 Exemple avec unpack()
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("cchars/nint", $binarydata);
print_r($array);
?>
L'exemple ci-dessus va afficher :
Array
(
[chars] => 4
[int] => 160
)
Exemple #2 Exemple avec unpack() et un argument de répétition
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("c2chars/nint", $binarydata);
print_r($array);
?>
L'exemple ci-dessus va afficher :
Array
(
[chars1] => 4
[chars2] => 0
[int] => 40960
)
Notes
Attention
Il faut noter que PHP gère les valeurs en interne
sous forme signée. Si vous déconditionnez
une valeur qui est aussi grande que la taille utilisée
en interne par PHP, le résultat se trouvera être
un nombre négatif, même s'il a été
déconditionné avec l'option " non signé "
.
Attention
Si vous ne nommez pas un élément, les index numériques à partir de
1
sont utilisés. Sachez que si vous avez plus d'un
élément sans nom, certaines données sont écrasées parce que la numérotation
redémarre à partir de 1
pour chaque élément.
Exemple #3 Exemple avec unpack() avec des clés non nommées
<?php
$binarydata = "\x32\x42\x00\xa0";
$array = unpack("c2/n", $binarydata);
var_dump($array);
?>
L'exemple ci-dessus va afficher :
array(2) {
[1]=>
int(160)
[2]=>
int(66)
}
Notez que la première
valeur depuis le spécificateur c
est écrasé
par la première valeur depuis le spécificateur n
.
Voir aussi
- pack() - Compacte des données dans une chaîne binaire