Как получить независимую от регистра ширину целочисленных переменных без знака в C? - PullRequest
1 голос
/ 24 декабря 2010

Я пишу код для Linux, работающего на архитектурах Intel x86 и x64 (по крайней мере!) С дампом gcc и чтением структур данных из памяти на диск, как дешевый способ добиться сериализации. В каждом поле не должно быть дополнительного отступа.

Для этого я тщательно организовал структуры так, чтобы каждое поле имело столько битов, сколько им нужно для хранения информации, и выровняло их вручную до границ 4 байта (это должно быть восемь?).

Я начал изучать множество целочисленных модификаций (int, long int, long long int, unsigned long long int и т. Д.), Но не нашел определенного источника по этому вопросу (и получение информации о конструкциях с помощью фиктивных программ скучно и утомительно и специфично для моего оборудования.)

При этом мне нужно, чтобы некоторые поля были 16 битами, некоторые поля были 32 битами, а некоторые - 64 битами. Есть ли способ добиться этого?

1 Ответ

4 голосов
/ 24 декабря 2010

Вы можете использовать заголовок C99 <stdint.h>, который определяет типы фиксированной ширины, такие как int16_t и uint32_t, среди многих других.очевидно, но если вы точно знаете, насколько велик каждый элемент данных, это не должно быть слишком сложно.Для вас по-прежнему будет полезно использовать атрибуты packed и aligned GCC для обеспечения правильного выравнивания.

...