从文件加载结构



我已经阅读了有关从文件加载结构的问题。字节序和不同的可变大小存在问题。但是让我们假设有一个这样的结构:

struct Structure
{
uint8_t value1;
uint16_t value2;
uint32_t value3;
uint64_t value;4
};

假设文件始终以小端格式编写,因此应用程序以严格的方式读取它。在这种情况下,字节序应该不会引起任何问题。(让我们假设有某种 convertEndinness(( 函数,它足够聪明,可以省略字节顺序问题(。我知道需要考虑的第二件事是可变尺寸的多样性。有我的问题。固定大小类型是否设法处理此问题,为了创建多平台二进制文件,我还应该考虑什么?

固定大小类型是否设法处理此问题

差一点。

固定尺寸类型具有固定尺寸,但它们的对齐要求(以及填充(可能因平台和/或 ABI 风格而异。因此,即使具有相同的字节序,您的结构在不同的平台上仍然可以具有不同的布局。

你可以坚持不应该有填充,并使用一些特定于编译器和非标准的方式来指定这一点(如#pragma pack__attribute__((packed))(。但是,这可能会为直接访问未对齐的成员生成更糟糕的代码。

为了创建多平台二进制文件,我还应该考虑什么?

如果选择字节序,使用固定大小的类型并正确指定对齐方式,则可能没问题。

我强烈建议添加一个标题和/或一些框架信息,以及一个版本,可能还有一些关于您选择的大小和对齐方式的元数据。否则,您将来永远无法更改此文件格式,而不会以令人不快的方式破坏。

最新更新