Trabajar con datos binarios en PHP

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?

preguntado Oct 05 '10, 09:10

No estoy seguro de si esto ayuda, pero aquí va: phpclasses.org/paquete/… -

2 Respuestas

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

¿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 or haz tu propia pregunta.