(PHP 4, PHP 5)
unpack — Déconditionne des données depuis une chaîne binaire
$format
, string $data
)
Déconditionne les données data
depuis une chaîne binaire avec le format format
.
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.
format
Voir la fonction pack() pour une explication des codes de format.
data
Les données conditionnées.
Retourne un tableau associatif contenant les éléments déconditionnés d'une chaîne binaire.
Version | Description |
---|---|
5.5.0 |
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. |
Exemple #1 Exemple avec unpack()
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("cchars/nint", $binarydata);
?>
Le tableau résultant contiendra les entrées "chars" avec les valeurs 4 et "int" avec 160.
Exemple #2 Exemple avec unpack() et un argument de répétition
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("c2chars/nint", $binarydata);
?>
Le tableau résultant contiendra les entrées "chars1", "chars2" et "int".
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, une chaîne vide sera utilisée. Si vous ne nommez pas plus d'un élément, cela signifie que quelques données seront écrasées lorsque les clés sont identiques, comme ceci :
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);
?>
Le tableau résultant contiendra les entrées "1" avec la valeur 160 et "2" avec 66. La première valeur depuis le spécificateur c est écrasé par la première valeur depuis le spécificateur n.