Страница 1 из 1

C++ (или Delphi) код в PHP

Добавлено: 23 окт 2004, 01:58
Anonymous
На делфе написал такую вот штуку

Код: Выделить всё

  FLAP_HDR = packed record
    Sign : byte;     // Command start
    ChID : byte;     // Chanel ID (1..4)
    SEQ  : word;     // Packet Number
    Len  : word;     // Lenght of Data Block
  end;
далее по ходу кода был вызов

Код: Выделить всё

recv(mySocket,FLAP,6,0)
тут все отлично первый байт записался в Sign второй в ChID третий и четвертый в SEQ пятый и шестой в Len

ясное ело что и с++ это будет все так же прекрасно
НО МНЕ НАДО ЭТОТ ЖЕ КОД В PHP!

я может тупой но не догоняю ...
нету же структур в PHP мне кто-то посоветовал юзать
асоциативные массивы ну допустим

Код: Выделить всё

$FLAP = array("Sign"=>0,"ChID"=>0,"SEQ"=>0,"Len"=>0);
далее взов

Код: Выделить всё

socket_recv($this->Socket,$this->FLAP,6,0)
он же с массивом не понятно что сделал
1) или увеличл егго до 6 елементов
2) или вообще это теперь строка из 6 байт фиг поймешь какиех

Люди помогите

Добавлено: 23 окт 2004, 15:01
Anonymous
Никто незнает? =(

Добавлено: 23 окт 2004, 23:55
exe
Ecolog,

Извини, pascal лет десять назад видел, помочь не могу.
Может кто из знающих глянет сюда.

Добавлено: 25 окт 2004, 11:50
leikind
socket_recv() ожидает строку вторым параметром. Вот дай ему строку, зачитай туда 6 байт, а затем вытащи из строки по байту в такую структуру, которая тебе по душе.

Добавлено: 25 окт 2004, 12:13
Anonymous
leikind, Да я понимаю но мне часто надо оазные размеры тут я показал 6 байт из 6 байт в параметре Len далее будет другой пакет совершенно заранее не извесного формата и очень много надо будет делать проверок ... неужели нет ничего более универсального? ...

Добавлено: 25 окт 2004, 14:07
satanic_mechanic
leikind, Да я понимаю но мне часто надо оазные размеры тут я показал 6 байт из 6 байт в параметре Len далее будет другой пакет совершенно заранее не извесного формата и очень много надо будет делать проверок ... неужели нет ничего более универсального? ...
Может я чего-то не понял, но если ты хочешь читать в структуры, то где здесь универсальность. Ведь в случае структуры ты знаешь формат заранее. А если нужен универсальный способ, то тут и в C/Delphi просто структурой не обойтись (ведь ты не знаешь формат данных).

Может немного конкретизируешь задачу? Если формат заранее неизвестен, то как именно ты его узнаешь, когда наступит время использовать эти данные?

Добавлено: 26 окт 2004, 01:18
Anonymous
нет нет формат известен я напутал ...
мне просто важно чтобы данные записываюсь именно в структуру
чтобы не делать дополнительный матем вычеслений и не отслеживать с какого байта что читать ... т.е. просто как я писал выше приводя пример на дельфе (он же на с++ так же)

Добавлено: 26 окт 2004, 10:11
leikind
Ну нет структур в php. Нет. Ибо нафиг.

Добавлено: 26 окт 2004, 17:21
Llama
Если нет ограничений по ширине канала, то заюзай например XML.

Добавлено: 27 окт 2004, 14:11
satanic_mechanic
Aleksey Kondratenko писал(а):См. pack и unpack. Во всех скриптовых языках работа с двоичными структурами идет через них.

BTW: на C такая структура не может мобильно читаться/писаться, не только из-за проблем с порядком байт, но и из-за выравнивания. Упакованных структур в стандарном C нету.
В стандартном C упакованных структур нету, но наверное каждый более-менее распространенный компилятор языка C добавляет свою поддержку для этого. Это точно есть и на VC и в GCC (смотреть в сторону __attribute__). Так что единственным доводом не использовать для этой цели структуры на Intel машине будет только проблема с порядком байт.

P. S. Если сам пишеш и клиент и сервер - можно избежать и этой проблемы. Ведь тебе решать, что и как слать.

P. S. S. Но я бы структуры для получения информации по recv все равно использовать бы не советовал бы ... :) Лучше делай, как посоветовал Leikind. Так ты сам все проконтролируешь ...