为什么这两个变量之一以相反的顺序打印到文件中?

Why do one of these two variables print in opposite order into the file?

变量如下:

int z = 0x12345678;
char zz[] = { 0x12, 0x34, 0x56, 0x78 };

我使用以下方法将它们打印到文件中:

ofstream myfile;
myfile.open("myfile.txt", ios::out | ios::binary);
myfile.write((const char*)&z, sizeof(z));
myfile.write((const char*)&zz, sizeof(zz));
myfile.close();

在十六进制编辑器中看到该文件包含以下内容:

78 56 34 12 12 34 56 78

为什么顺序颠倒了?使两者行为相同的解决方法是什么?我希望 int 的打印顺序与我输入的顺序相同,就像 char 一样。

我在另一个地方遇到了同样的问题,我写了一个函数来打印输入值的二进制文件。它将参数作为 const char*。我将 int z'saddress 转换为 const char* 并可以调用该函数,我也可以传递 zz 的地址。该函数屏蔽每一位并查看它是 0 还是 1 并将其打印到屏幕上。由于 int 和 char 的解释方式不同,该函数适用于 char 而不是 int。

因为您 运行 您的代码在小端机器上,因此 int 在内存中存储为 78 - 56 - 34 -12。 当您写入字节序列时,您正在磁盘上写入 int 的 4 个字节,因为它们在内存中。因此,与 4 字节数组相比,int 具有镜面反射。

关键是:直到你在同一台机器上写入和读取相同类型的数据(所以你没有处理大端和小端问题)我不明白按顺序找到解决方案的意义将两个 12345678 序列写入磁盘。

这是因为字节顺序(请参阅 https://en.wikipedia.org/wiki/Endianness)。您应该编写与字节序无关的代码来避免此类问题。

编辑:IBM 有一篇关于此的精彩文章https://www.ibm.com/developerworks/aix/library/au-endianc/index.html