Бинарные данные

kvf77

Red Devil
Бинарные данные

Не сталкивался с таким раньше, подскажите что делать.

Есть бинарный протокол, команды в нем выглядят следующим образом:

4 байта - Integer (длина строки)
затем !
затем код команды

Так вот, проблема в первых 4 байтах, дело в том, что длина строки передается от младшего байта к старшему

Надо эти байты считывать и приводить в привычный для PHP integer.

Никак не соображу как это делать.

Пример:

(hex) 0D 00 00 00 (<- первые четыре байта), надо в конечном итоге преобразовать к виду $a = 13;

Соответственно, нужно и обратное преобразование - подскажите чего делать.
 

AmdY

Пью пиво
Команда форума
php -r "$a='0d 00 00 00'; $b = explode(' ', $a); echo hexdec($b[3]
.$b[2].$b[1].$b[0]);"
13

??? или я что-то не понял?
 

dimagolov

Новичок
ты читаешь данные в строку? значит можешь разобрать побайтно (посимвольно) и установить нужный порядок.

еще есть ф-я http://www.php.net/manual/en/function.unpack.php, там есть варианты упаковки целых в любом виде.
 

kvf77

Red Devil
AmdY
не понимаешь - это я написал специально в HEX потому что иначе я их никак не напишу, там БИНАРНЫЕ данные

dimagolov
щас почитаю, блин не сталкивался с такой дурью никогда

-~{}~ 03.10.09 17:15:

Кажется, вот это помогло:

$out = unpack("L", $out);

echo $out[1];
 

Alexandre

PHPПенсионер
kvf77 45 минут осовения написания экстеншена и любые бинарные протоколы будут у тебя в кармане.
я бы с обработкой на пхп бинарных данных даже не парился, потому что на 32 битной платформе будет так, а на 64 битной - по иному. Особенно с интегерами.
 

kvf77

Red Devil
Alexandre
не я это придумал - есть сервер, который общается по такому протоколу, что я с этим сделаю?
 

Alexandre

PHPПенсионер
Пример из жизни:
есть такой бинарный протокол AMQP
есть класс php-qmqplib, который нативно реализует этот протокол, глючный очень...Долго мучился.
потратил три дня и написал собственное расширение. Работает как часы.
так что бывает иногда лучше помучится на Си и не ждать косяков.
 
Сверху