Trabajar con datos binarios en PHP
Frecuentes
Visto 1,760 veces
3
Estoy escribiendo un cliente para un protocolo de socket binario en PHP, y es una molestia. Estoy usando actualmente pack
convertir números en cadenas binarias, pero falta. Dos opciones pack
tiene son:
- Escriba un entero de 32 bits con signo en el orden de bytes de la máquina
- Escriba un entero de 32 bits con signo en orden de bytes big endian
Pero necesito escribir enteros de 32 bits firmados en orden big endian, como con Java DataOutputStream.writeInteger
. pack
no tiene esa opción.
¿Hay alguna manera de hacer esto con pack
, o para transformar la salida de pack
, ¿o quizás una mejor biblioteca para trabajar con datos binarios en PHP?
2 Respuestas
0
La especificación para PHP pack()
dice que la distinción sin firmar / firmado solo importa para unpack()
no, pack()
.
Así que solo use la opción de orden de bytes de red de 32 bits (N
).
Respondido 05 Oct 10, 14:10
+ 4 mil millones, ¿no resulta eso en el mismo número? También sospecho que esto no es muy portátil. stackoverflow.com/questions/300840/force-php-integer-overflow - Bart van Heukelom
@Bart vna Heukelom: Reflexionando más y comprobando la documentación, puede usar la opción sin firmar. - caf
2
¿Utiliza Zend Framework? Si es así, puede utilizar la función Zend_Io_Writer::writeInt32BE()
Escribe un entero de 32 bits con signo como datos binarios ordenados big-endian en la secuencia.
O de lo contrario deberías echar un vistazo a la Fuente ZF cómo estos chicos manejan esto.
Respondido 05 Oct 10, 13:10
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php sockets networking binary endianness or haz tu propia pregunta.
No estoy seguro de si esto ayuda, pero aquí va: phpclasses.org/paquete/… - Russell Dias