二进制文件在Windows上比在Linux上小

时间:2011-11-17 15:17:11

标签: c++ file binary

我正在开发一个将二进制数据写入文件的程序。在Windows上,由于某种原因,生成的文件比Linux上的文件略小。以字节为单位的大小和MD5哈希值都不同。如何使用相同的代码实现这一点?

我已经添加了ifstream::binary标记,并确保设置noskipws ...

ofstream output("output", ifstream::binary);
output << std::noskipws;

我在我的程序上运行了Application Verifier,它没有生成任何有关可能的内存损坏的错误或警告。

还有其他原因导致文件输出可能不同吗?

2 个答案:

答案 0 :(得分:2)

差异可能是由于不同的开发环境。不同的编译器,硬件和操作系统都可以改变底层数据的格式。例如,不同的编译器可能会以不同的效率打包您的数据结构。此外,由于处理器不同,您的基本类型(整数,长整数,浮点数等)可能会有不同的大小。

简而言之,需要二进制数据之间跨平台兼容性的程序可以制定非常精确的规则,将结构和值打包成二进制格式(通常在现场,同样精确的读取数据规则。

答案 1 :(得分:1)

如果你没有准确地看到你正在写什么文件以及你如何调用它,很难给出一个真正有用的答案,但如果你使用流插入操作符(也就是格式化的输出操作符)来做你的文件写入,然后根据您的语言环境设置将任何非字符串数据转换为字符串。如果这就是你实际在做的事情,那么使用ofstream::binary似乎毫无意义,因为你无论如何只是在写文字。

我建议创建一个可能存在差异的最小示例,并在十六进制编辑器中检查输出,看看发生了什么。