2010-10-05 90 views
3

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

  • 写机字节顺序
  • 32位有符号整数写大端字节顺序

的insigned 32位整数,但我需要写符号32位整数以big endian顺序排列,如Java的DataOutputStream.writeIntegerpack没有这个选项。

有没有办法做到这一点与pack,或转换输出pack,或者可能是一个更好的库在PHP中处理二进制数据?

+1

不知道这是否有帮助,但这里有:http://www.phpclasses.org/package/2454-PHP-Serialize-and-unserialize-binary-data.html – 2010-10-05 12:21:50

回答

0

PHP的pack()规范规定,无符号/有符号区别只对unpack()而不是pack()有效。

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

+0

+ 40亿,是不是结果在相同的数字?我也怀疑这是不是很便携,请参阅http://stackoverflow.com/questions/300840/force-php-integer-overflow – 2010-10-05 13:17:39

+0

@Bart vna Heukelom:进一步反思,并检查文档,你可以使用无符号选项。 – caf 2010-10-05 13:49:46

2

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

写操作符号的32位整数作为 大端有序二进制数据的 流。

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