如何在C中获得与寄存器宽度无关的无符号整数变量?

时间:2010-12-24 15:33:48

标签: c linux gcc types 32bit-64bit

我正在为运行在Intel x86和x64架构上的Linux编写代码(至少!),使用gcc转储和从内存到磁盘读取数据结构作为实现序列化的廉价方式。每个字段都应该没有填充。

为此,我仔细地组织了这些结构,以便每个字段都具有存储信息所需的位数,并将它们手动对齐到4个字节的边界(应该是8个?)。

我开始考虑过多的整数修改(intlong intlong long intunsigned long long int等等),但没有找到关于此事的明确来源(和通过虚拟程序获取有关结构的信息是枯燥乏味的,并且特定于我的硬件。)

这就是说,我需要一些字段为16位,一些字段为32位,一些字段为64位。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:4)

您可以使用C99标题<stdint.h>,它定义了int16_tuint32_t等固定宽度类型。

显然,您仍然需要小心填充和对齐,但如果您确切知道每个数据成员的大小,那么它应该不会太困难。利用GCC's packed and aligned attributes来确保正确对齐仍然是有益的。