Re: как объявить структуру в Си
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 03.08.13 05:38
Оценка: 6 (1)
Здравствуйте, sergey2b, Вы писали:

S>подскажите пожалуйста как в ANSI C можно объявить структуру что бы одно поле была грантированно 16 бит другое 32 бита

S>конечная цель кроссплатформенно считать данные из буффера, где каждый элемент данныъ имеет фиксированный размер 16/32 бита

Именно в ANSI — никак. Только читать как 4-октетный массив (в общем случае даже не 4-байтовый!) и декодировать посимвольно.

Но если целевая область ограничена компиляторами Microsoft C, Intel C, GCC, Clang и т.п. — то достаточно #pragma pack(push,1) перед определением структуры (и #pragma pack(pop) после этого).

Учтите ещё проблему endianness (порядка байтов), и использования подходящих типов данных (таких, как int32_t, uint16_t).
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.