Работа с двоичными данными в PHP - PullRequest
3 голосов
/ 05 октября 2010

Я пишу клиент для протокола бинарных сокетов в PHP, и это боль.В настоящее время я использую pack для преобразования чисел в двоичные строки, но этого не хватает.Два параметра pack имеет:

  • Запись 32-разрядного целого числа со знаком в порядке байтов машины
  • Запись 32-разрядного целого числа без знака в порядке байтов с прямым порядком байтов

Но мне нужно написать 32-разрядные целые числа со знаком в порядке с прямым порядком байтов, как в Java DataOutputStream.writeInteger.pack не имеет этой опции.

Есть ли способ сделать это с помощью pack, или преобразовать вывод pack, или, возможно, лучшую библиотеку для работы с двоичными данными в PHP

Ответы [ 2 ]

2 голосов
/ 05 октября 2010

Используете ли вы Zend Framework? Если это так, вы можете использовать функцию Zend_Io_Writer::writeInt32BE()

Записывает 32-разрядное целое число со знаком как упорядоченные двоичные данные с порядком байтов поток.

Или же вы должны взглянуть на ZF-источник , как эти парни справляются с этим.

0 голосов
/ 05 октября 2010

Спецификация для PHP pack() гласит, что различие без знака / со знаком имеет значение только для unpack(), а не pack().

Так что просто используйте опцию порядка 32-битных сетевых байтов (N).

...