unpack
(PHP 4, PHP 5, PHP 7)
unpack — Déconditionne des données depuis une chaîne binaire
Description
$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.
Liste de paramètres
-
format
-
Voir la fonction pack() pour une explication des codes de format.
-
data
-
Les données conditionnées.
Valeurs de retour
Retourne un tableau associatif contenant les éléments déconditionnés d'une chaîne binaire.
Historique
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. |
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
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é ".
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.
Version en cache
10/01/2025 11:09:59 Cette version de la page est en cache (à la date du 10/01/2025 11:09:59) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-unpack.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.