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

Все о программировании под *nix
Anonymous

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

Сообщение 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 байт фиг поймешь какиех

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

Anonymous

Сообщение Anonymous »

Никто незнает? =(

Аватара пользователя
exe
Неотъемлемая часть форума
Сообщения: 860
Зарегистрирован: 28 ноя 2003, 21:08
Откуда: Минск

Сообщение exe »

Ecolog,

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

Аватара пользователя
leikind
Неотъемлемая часть форума
Сообщения: 811
Зарегистрирован: 20 июн 2002, 03:02
Откуда: Брюссель
Контактная информация:

Сообщение leikind »

socket_recv() ожидает строку вторым параметром. Вот дай ему строку, зачитай туда 6 байт, а затем вытащи из строки по байту в такую структуру, которая тебе по душе.
Изображение

Anonymous

Сообщение Anonymous »

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

Аватара пользователя
satanic_mechanic
Интересующийся
Сообщения: 56
Зарегистрирован: 18 июл 2003, 01:36
Контактная информация:

Сообщение satanic_mechanic »

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

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

Anonymous

Сообщение Anonymous »

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

Аватара пользователя
leikind
Неотъемлемая часть форума
Сообщения: 811
Зарегистрирован: 20 июн 2002, 03:02
Откуда: Брюссель
Контактная информация:

Сообщение leikind »

Ну нет структур в php. Нет. Ибо нафиг.
Изображение

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

Если нет ограничений по ширине канала, то заюзай например XML.
Опыт растет прямо пропорционально выведенному из строя оборудованию

Аватара пользователя
satanic_mechanic
Интересующийся
Сообщения: 56
Зарегистрирован: 18 июл 2003, 01:36
Контактная информация:

Сообщение satanic_mechanic »

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

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

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

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

Ответить