ofstream在Unix服务器上写入额外的零字节到文件

时间:2018-06-15 21:16:53

标签: c++ file-io xxd

为什么以下代码在使用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

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

1 个答案:

答案 0 :(得分:4)

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

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