作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试读取二进制文件。问题是文件的创建者没有花时间正确地将数据结构与它们的自然边界对齐,并且一切都被打包得很紧。这使得使用 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/
我是一名优秀的程序员,十分优秀!