2

为什么以下代码在使用 Visual C++ 的本地 Windows 机器上运行时会写入 4 个字节,而当我上传到学校的 Unix 服务器时会写入 4 个额外的 0 字节?

unsigned long temp = 1025;
ofstream file("test", ofstream::binary);
file.write((char*)&temp, sizeof(temp));

这是在本地使用 xxd 的结果:0104 0000

这是 Unix 服务器上的结果:0104 0000 0000 0000

这是我打开文件的模式的问题吗?

4

1 回答 1

4

long具有实现定义的大小。您的 Windows 系统使用 32 位(4 字节)long(即使 64 位 Windows 也使用 32 位long;否则在 64 位操作系统上很少见),而我所知道的大多数(如果不是全部)类 UNIX 系统都有 64 位(8 字节long)由于您正在写出sizeof(temp)字节,并且tempis unsigned long,您将在不同的系统上获得不同的输出大小(如果您从小端机器移动到大端机器,您可能还会遇到字节顺序问题)。

如果您需要一致的尺寸,请使用 中的固定宽度类型<cstdint>,例如uint32_tuint64_t

于 2018-06-15T21:19:03.907 回答