我有一个包含三个变量的结构:两个无符号整数和一个无符号字符。根据我的理解,C++ char 始终是 1 个字节,无论它在什么操作系统上。对于其他数据类型则不能这样说。我正在寻找一种标准化 POD 的方法,以便在保存到二进制文件中时,生成的文件在编译代码的任何操作系统上都是可读的。
我通过添加 #pragma
更改结构以使用 1 字节对齐,如下所示:
#pragma pack(push, 1)
struct test
{
int a;
}
#pragma pack(pop)
但这并不一定意味着 int a
在每个操作系统上都是 4 个字节,我不这么认为?有没有办法确保从我的代码保存的文件始终可读?
最佳答案
您可以在 std::int32_t
中找到固定宽度整数类型(例如 std::uint16_t
和 <cstdint>
) 。您的 C++ 标准库实现可能不包括 <cstdint>
(它不是当前 C++ 标准的一部分;它是 C++0x 的一部分),在这种情况下 Boost has an implementation这应该适用于大多数平台。
请注意,除其他事项外,您仍然需要考虑字节序和对齐方式。如果您的代码需要在具有不同数字表示形式(例如补码和补码)的平台上运行,您也需要考虑这一点。
关于C++跨系统标准化数据大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4548515/