我正在尝试读取二进制文件。问题在于文件的创建者没有花时间将数据结构与其自然边界正确对齐,并且所有内容都包装得很紧。这使得使用 C++ 结构读取数据变得困难。
有没有办法强制struct
打包紧?
Example:
struct {
short a;
int b;
}
上面的结构体是8个字节:2为short a
, 2 表示填充, 4 表示int b
。然而,在磁盘上,数据只有 6 个字节(没有用于对齐的 2 个字节的填充)
请注意,实际的数据结构有数千个字节和许多字段,包括几个数组,所以我不想单独读取每个字段。
如果你使用 GCC,你可以这样做struct __attribute__ ((packed)) { short a; int b; }
在 VC++ 上你可以这样做#pragma pack(1)
。这个选项是也得到海湾合作委员会的支持.
#pragma pack(push, 1)
struct { short a; int b; }
#pragma pack(pop)
其他编译器可能可以选择在没有填充的情况下对结构进行紧密包装。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)