>>Уважаемые коллеги. Хочу спросить вашего совета.
>>
>>Есть задача. Прочитать из файла сообщение определенного формата и разобрать его
>>по полям. Однако, поля не выровнены по границам байтов. Связано это с
>>тем, что
>>сообщения идут в протоколе HDLC, а там бит-стаффинг, служебные биты и т.д.
>
>В этом случае обратить внимание на директиву gcc __packed__. info gcc. Вероятнее
>всего, можно более красиво решить через union'ы. union также выравниваются по границе.
__packed__ - не работает для других компиляторов (увы).
Я делал так (случай единого кода под разные компиляторы на разных ОС):
#pragma pack(1)
struct {
u_int8 header;
u_int16 lenght;
} data;
#pragma pack(4)
Для новых компиляторов (например gcc 3.x и выше) лучше pack(1,push) и pack(pop) (если не забыл синтаксис)
Совет: Окружайте прагмой конкретные структуры, а не весь h-файл. А то я однажды запихал в прагмы заодно и класс с виртуальными функциями.. так весело было....
Стаффинг у меня на лету разбирался.