2010-10-05 94 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這些傢伙如何處理這個。