(PHP 4, PHP 5, PHP 7, PHP 8)
unpack — Desempaqueta datos desde una cadena binaria
Desempaqueta los datos data
desde una cadena binaria con el formato format
.
Los datos desempaquetados se almacenan en un array. Para ello, debe asignarse un nombre a cada formato utilizado y separarlos con una barra (/). Si se proporciona un argumento de repetición, entonces cada una de las claves del array tendrá un número de secuencia detrás del nombre proporcionado.
Se han realizado modificaciones para alinear el comportamiento de esta función con Perl :
format
Consulte la función pack() para una explicación de los códigos de formato.
string
Los datos empaquetados.
offset
La posición donde comenzar el desempaquetado.
Devuelve un array asociativo que contiene los elementos desempaquetados
de una cadena binaria, o false
en caso de error.
Versión | Descripción |
---|---|
7.2.0 | Los tipos float y double soportan tanto la orientación Big Endian como Little Endian. |
7.1.0 |
Se ha añadido el argumento opcional offset .
|
Ejemplo #1 Ejemplo con unpack()
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("cchars/nint", $binarydata);
print_r($array);
?>
El resultado del ejemplo sería:
Array ( [chars] => 4 [int] => 160 )
Ejemplo #2 Ejemplo con unpack() y un argumento de repetición
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("c2chars/nint", $binarydata);
print_r($array);
?>
El resultado del ejemplo sería:
Array ( [chars1] => 4 [chars2] => 0 [int] => 40960 )
Debe tenerse en cuenta que PHP maneja los valores internamente
en forma firmada. Si se desempaqueta
un valor que es tan grande como el tamaño utilizado
internamente por PHP, el resultado será
un número negativo, incluso si se ha
desempaquetado con la opción "no firmado"
.
Si no se nombra un elemento, se utilizan los índices numéricos a partir de
1
. Tenga en cuenta que si tiene más de un
elemento sin nombre, algunos datos se sobrescriben porque la numeración
se reinicia a partir de 1
para cada elemento.
Ejemplo #3 Ejemplo con unpack() con claves no nombradas
<?php
$binarydata = "\x32\x42\x00\xa0";
$array = unpack("c2/n", $binarydata);
var_dump($array);
?>
El resultado del ejemplo sería:
array(2) { [1]=> int(160) [2]=> int(66) }
Observe que el primer
valor desde el especificador c
es sobrescrito
por el primer valor desde el especificador n
.