gpt4 book ai didi

c++ - 从文件加载结构

转载 作者:行者123 更新时间:2023-11-30 03:22:25 26 4
gpt4 key购买 nike

我读过有关从文件加载结构的问题。字节序和不同的变量大小存在问题。但是让我们说有这样一个结构:

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

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

最佳答案

Do fixed size types manage to handle this problem

不完全是。

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

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

what else should I consider in order to create multiplatform binary file?

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

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

关于c++ - 从文件加载结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51153407/

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