(PHP 4, PHP 5, PHP 7)
unpack — Desempaqueta datos de una cadena binaria
$format
, string $data
)
Desempaqueta desde una cadena binaria a una matriz de acuerdo a
format
.
Los datos desempaquetados son almacenados en una matriz asociativa. Para lograr esto es necesario nombrar los diferentes códigos de formato y separarlos con una barra /. Si estuviera presente un parámetro repetidor, cada una de las claves de la matriz tendría un número de secuencia tras el valor establecido.
format
Vea pack() para una explicación de los códigos de formato.
data
Los datos empaquetados.
Devuelve una matriz asociativa que contiene los elementos desempaquetados de la cadena binaria.
Versión | Descripción |
---|---|
5.5.0 |
Cambios realizados para poner esta función en línea con Perl: El código "a" ahora guarda bytes NULL sobrantes de cola. El código "A" ahora elimina todos los espacios en blanco ASCII sobrantes de cola (espacios, tabulaciones, nuevas líneas, retorno de carro, y bytes NULL). Se añadió en código "Z" para cadenas rellenadas con NULL, y elimina los bytes NULL sobrantes de cola. |
Ejemplo #1 Ejemplo de unpack()
<?php
$datosbinarios = "\x04\x00\xa0\x00";
$matriz = unpack("cchars/nint", $datosbinarios);
?>
La matriz resultante contendrá las entradas "chars" con el valor 4 e "int" con el valor 160.
Ejemplo #2 Ejemplo de unpack() con un repetidor
<?php
$datosbinarios = "\x04\x00\xa0\x00";
$matriz = unpack("c2chars/nint", $datosbinarios);
?>
La matriz resultante contendrá las entradas "chars1", "chars2" e "int".
Note que PHP almacena internamente los valores enteros como valores con signo. Si desempaqueta un entero largo sin signo y es del mismo tamaño que los valores almacenados internamente por PHP, el resultado será un número negativo incluso si se especifica un valor sin signo al desempaquetar.
Tenga en cuenta que si un elemento no tiene nombre, se usará una cadena vacía. Si hubiera más de un elemento sin nombre, esto significaría que se sobrescribirían algunos datos, ya que sus claves coincidirían, como ocurre en:
Ejemplo #3 Ejemplo unpack() con claves sin nombre
<?php
$datosbinarios = "\x32\x42\x00\xa0";
$matriz = unpack("c2/n", $datosbinarios);
var_dump($matriz);
?>
La matriz resultante contendrá las entradas "1" con el valor 160 y "2" con 66. El primer valor del especificador c quedaría sobrescrito por el primer valor del especificador n.