gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:42:24 26 4
gpt4 key购买 nike

我正在为在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com