Здравствуйте, 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).