作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在为在 Intel x86 和 x64 架构(至少!)上运行的 Linux 编写代码,使用 gcc 转储和从内存到磁盘读取数据结构作为实现序列化的廉价方式。每个字段都不应有额外的填充。
为此,我仔细组织了结构,使每个字段的位数与存储信息所需的位数一样多,并将它们手动对齐到 4 字节边界(应该是 8 字节吗?)。
我开始研究过多的整数修饰(int
、long int
、long long int
、unsigned 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/
我是一名优秀的程序员,十分优秀!