Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [qt, Linux] использование ntohs, ntohl


Автор: gordmiand 7.5.2010, 20:01
считал из сетевого буфера данные – допустим одно значение типа unsigned short = 0xFF35:
могу обращаться (считать значение) к его байтам:
Код

char *buf[100];

*((unsigned char*)&buf)
*((unsigned char*)&buf+1)


Мне надо перевернуть данное число (0xFF35) – хочу воспользоваться функцией ntohs…
Но как мне корректно задать параметр у этой функции? Само число я не имею, а имею только адреса ячеек памяти, где оно лежит – то есть надо как-то “сложить” его 2 разряда (см. код выше) и взять от этого дела ntohs…Как  это сделать? И желательно получить (оставить) это число в 16-ричной системе счисления  - в итоге должно получиться 0x35FF…
И вообще – в линуксе (пишу под Qt 4.6) есть функции ntohl, ntohs??? какой у них инклудник?

Автор: djamshud 8.5.2010, 00:05
>какой у них инклудник? 

man 3 htons

А если хостовый порядок байт соответствует сетевому (big-endian), то вообще ничего не перевернется. И на засыпку, раз уж к байтам и так можете обращаться, почему бы и не поменять их местами вручную?..

Автор: gordmiand 9.5.2010, 23:37
djamshud: так в том то и дело, что хостовый порядок байт НЕ соответствует сетевому...
понятное дело, что можно написать свои функции ручной перестановки байтов для различных типов данных (я уже их в принципе написал), но уж коли есть стандартные функции для этих же целей, то почему бы ими не воспользоваться? весь вопрос в том как именно это корректно сделать, имея не число целиком, а только возможность обращения к отдельным его байтам...
подскажите пож-та как в таком случае задать правильно аргумент для ntohl/ntohs...

Автор: djamshud 10.5.2010, 06:57
Код

short hvar=*(short*)buf;
short nvar=htons(hvar);


При не дай бог портировании на другую архитектуру вы ошибку хрен выловите.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)