gpt4 book ai didi

c++ - 强制 C++ 结构紧密打包

转载 作者:IT老高 更新时间:2023-10-28 12:50:46 25 4
gpt4 key购买 nike

我正在尝试读取二进制文件。问题是文件的创建者没有花时间正确地将数据结构与它们的自然边界对齐,并且一切都被打包得很紧。这使得使用 C++ 结构读取数据变得困难。

有没有办法强制 struct 被打包紧?

例子:

struct {
short a;
int b;
}

上面的结构是8个字节:2个用于short a,2个用于填充,4个用于int b。但是,在磁盘上,数据只有 6 个字节(没有 2 个字节的对齐填充)

请注意,实际的数据结构是数千字节和许多字段,包括几个数组,所以我不想单独读取每个字段。

最佳答案

如果你使用 GCC,你可以这样做 struct __attribute__ ((packed)) { short a;诠释 b; }

在 VC++ 上,您可以执行 #pragma pack(1)。这个选项是 also supported by GCC .

#pragma pack(push, 1)
struct { short a; int b; }
#pragma pack(pop)

其他编译器可能会选择在没有填充的情况下对结构进行紧密打包。

关于c++ - 强制 C++ 结构紧密打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21092415/

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