C++跨系统标准化数据大小

标签 c++ binaryfiles

我有一个包含三个变量的结构:两个无符号整数和一个无符号字符。根据我的理解,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/

相关文章:

c++ - 有没有办法在 MinGW 中控制所有三个子应用程序管道,即 STDOUT、STDIN 和 STDERR?

c++ - 线性索引上三角矩阵

c++ - 有没有办法修复因未正确关闭 boost::archive::binary_oarchive 而损坏的文件?

c - 将二进制文件构造成数组 C

C# Windows 窗体二进制文件

javascript - 将二进制文件内容转储到 JSON 数组中

c++ - 将文件中的整数读入数组

c++ - Dev C++ 在运行大内存程序时崩溃

c++ - 如何使用 C++ STL vector 通过 Boost MPI 发送矩阵的列?

c++ - 用C++读写二进制信息