unpack

(PHP 4, PHP 5, PHP 7)

unpackDesempaqueta datos de una cadena binaria

Descripción

unpack ( string $format , string $data ) : array

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.

Parámetros

format

Vea pack() para una explicación de los códigos de formato.

data

Los datos empaquetados.

Valores devueltos

Devuelve una matriz asociativa que contiene los elementos desempaquetados de la cadena binaria.

Historial de cambios

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.

Ejemplos

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".

Notas

Precaución

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.

Precaución

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.

Ver también

  • pack() - Empaqueta información a una cadena binaria