c++ - ofstream 将额外的零字节写入 Unix 服务器上的文件

标签 c++ file-io xxd

为什么以下代码在我的本地 Windows 计算机上使用 Visual C++ 运行时会写入 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

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

最佳答案

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

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

关于c++ - ofstream 将额外的零字节写入 Unix 服务器上的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50882768/

相关文章:

c++ - 创建 X 数量的无名对象

c++ - 使用 caffemodel 在 C++ 中对 CIFAR10 数据进行分类时出错

c++ - 读取此文件行的最短方法?

Java OutputStream 相当于 getClass().getClassLoader().getResourceAsStream()

python - 打开文件进行读/写,如果需要则创建

c - C语言中如何将字节转换为二进制

c++ - 将数字打印成文字

c++ - 使用 stringstream 将 pid_t 转换为 const char*

linux - 使用标准输入将一些十六进制字符串放入 xxd 不会生成任何输出

linux - Bash 脚本打印出二进制文件的内容,一次一个字,不带 xxd