(PHP 4, PHP 5)
pack — Empaquetar datos en una cadena binaria
Empaquetar los argumentas dados en una cadena binaria de acuerdo a formato .
La idea de esta función fue tomada de Perl y todos los códigos de formato funcionan igual que en aquél lenguaje, sin embargo, existen algunos códigos de formato faltantes, como el código "u" de Perl.
Note que la distinción entre valores con signo y sin signo sólo afecta a la función unpack(), mientras que la función pack() entrega el mismo resultado para códigos de formato con signo y sin signo.
También note que PHP almacena valores integer internamente como valores con signo de un tamaño dependiente de la máquina. Si le entrega un valor entero sin signo demasiado largo para ser almacenado en esa forma, es convertido a un valor float, lo cual frecuentemente produce un resultado inesperado.
La cadena formato consiste de códigos de formato seguidos por un argumento opcional de repetición. El argumento de repetición puede ser un valor entero o * para la repetición hasta el final de los datos de entrada. En el caso de a, A, h, y H el conteo de repetición especifica cuántos caracteres de un argumento de datos son tomados, para @ es la posición absoluta en dónde colocar el siguiente dato, para todos los demás el conteo de repetición especifica cuántos argumentos de datos son consumidos y empaquetados en la cadena binaria resultante.
Actualmente los formatos implementados son:
Código | Descripción |
---|---|
a | cadena completada con caracteres NUL |
A | cadena completada con espacios |
h | cadena Hex, nibble bajo primero |
H | cadena Hex, nibble alto primero |
c | caracter con signo |
C | caracter sin signo |
s | short con signo (siempre de 16 bits, orden de bytes de máquina) |
S | short sin signo (siempre de 16 bits, orden de bytes de máquina) |
n | short sin signo (siempre de 16 bits, byte más significativo primero) |
v | short sin signo (siempre de 16 bits, byte menos significativo primero) |
i | entero con signo (tamaño y orden de bytes dependiente de la máquina) |
I | entero sin signo (tamaño y orden de bytes dependiente de la máquina) |
l | long con signo (siempre de 32 bits, orden de bytes de máquina) |
L | long sin signo (siempre de 32 bits, orden de bytes de máquina) |
N | long sin signo (siempre de 32 bits, byte más significativo primero) |
V | long sin signo (siempre de 32 bits, byte menos significativo primero) |
f | flotante (tamaño y representación dependiente de la máquina) |
d | doble (tamaño y representación dependiente de la máquina) |
x | byte NUL |
X | Copiar un byte |
@ | relleno de NUL hasta una posición absoluta |
Devuelve la cadena binaria que contiene los datos.
Example#1 Ejemplo de pack()
<?php
$datos_binarios = pack("nvc*", 0x1234, 0x5678, 65, 66);
?>
La cadena binaria resultante tendrá 6 bytes de longitud y contendrá la secuencia de bytes 0x12, 0x34, 0x78, 0x56, 0x41, 0x42.