(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 :
formatConsulte la función pack() para una explicación de los códigos de formato.
stringLos datos empaquetados.
offsetLa posición donde comenzar el desempaquetado.
Devuelve un array asociativo que contiene los elementos desempaquetados
de una cadena binaria, o false si ocurre un 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 ejemplo anterior mostrará :
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 ejemplo anterior mostrará :
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 ejemplo anterior mostrará :
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.