【发布时间】:2014-02-01 06:22:04
【问题描述】:
我正在尝试读取二进制文件。问题是文件的创建者没有花时间正确地将数据结构与其自然边界对齐,并且所有内容都打包得很紧。这使得使用 C++ 结构读取数据变得困难。
有没有办法强制将struct 打包?
例子:
struct {
short a;
int b;
}
上面的结构是8个字节:2个用于short a,2个用于填充,4个用于int b。但是,在磁盘上,数据只有 6 个字节(没有 2 个字节的对齐填充)
请注意,实际的数据结构是数千字节和许多字段,包括几个数组,所以我不想单独读取每个字段。
【问题讨论】:
-
查看打包结构。请注意,某些架构需要对齐结构才能正确读取它们。
-
en.cppreference.com/w/cpp/language/alignas 说
alignas(0) has no effect? -
只需编写代码即可将序列化数据解码为内存中的表示形式。
-
如果您对此类结构进行字节打包,请在访问该整数值时注意段错误
-
在你的结构体中指定位域时还要注意字节顺序和域顺序,尤其是当你有任何跨越字节或字边界的域时!