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

标签 c linux gcc types 32bit-64bit

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

为此,我仔细组织了结构,使每个字段的位数与存储信息所需的位数一样多,并将它们手动对齐到 4 字节边界(应该是 8 字节吗?)。

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

也就是说,我需要一些字段为 16 位,一些字段为 32 位,一些字段为 64 位。有办法实现吗?

最佳答案

您可以使用 C99 header <stdint.h> , 它定义了像 int16_t 这样的固定宽度类型和 uint32_t ,等等。

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

关于c - 如何在 C 中获取与寄存器宽度无关的无符号整数变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4527067/

相关文章:

c - 字符串中的单词之间仅保留一个空格

linux - 将 tar.gz 打包成 shell 脚本

python - 为 pysqlite3 数据库创建类似 "less"的控制台寻呼机界面

linux - Amazon EC2 实例之间通信的最佳实践是什么?

c++ - 期望 const std::string & 的函数的链接器错误

c++ - cc1.exe 系统错误 - 缺少 libwinpthread-1.dll - 但它不是

gcc 内联 asm 模板,用于不带哈希的常量

c - 为什么指针 "forget"尽管指向 malloc 内存,但其值却是 0x104567910

c - 对字符串数组中的单词进行排序

c - mapPut 有什么问题?我找不到问题