在PHP中使用二进制数据

时间:2010-10-05 12:09:54

标签: php sockets networking binary endianness

我正在用PHP编写二进制套接字协议的客户端,这很痛苦。我目前正在使用pack将数字转换为二进制字符串,但它缺乏。 pack有两个选项:

  • 以机器字节顺序写入带符号的32位整数
  • 以大端字节顺序写入一个带内插的32位整数

但我需要以大端序列编写带符号的32位整数,就像Java的DataOutputStream.writeInteger一样。 pack没有该选项。

有没有办法用pack执行此操作,或者转换pack的输出,或者可能是更好的库来处理PHP中的二进制数据?

2 个答案:

答案 0 :(得分:2)

您使用Zend Framework吗?如果是这样,您可以使用函数Zend_Io_Writer::writeInt32BE()

  

将带符号的32位整数写为   big-endian将二进制数据排序到   流。

否则你应该看看ZF-source这些家伙如何处理这个问题。

答案 1 :(得分:0)

PHP pack()的规范表明,无符号/签名区别仅对unpack()而非pack()很重要。

所以只需使用32位网络字节顺序选项(N)。