我正在开发一个将二进制数据写入文件的程序。在Windows上,由于某种原因,生成的文件比Linux上的文件略小。以字节为单位的大小和MD5哈希值都不同。如何使用相同的代码实现这一点?
我已经添加了ifstream::binary
标记,并确保设置noskipws
...
ofstream output("output", ifstream::binary);
output << std::noskipws;
我在我的程序上运行了Application Verifier,它没有生成任何有关可能的内存损坏的错误或警告。
还有其他原因导致文件输出可能不同吗?
答案 0 :(得分:2)
差异可能是由于不同的开发环境。不同的编译器,硬件和操作系统都可以改变底层数据的格式。例如,不同的编译器可能会以不同的效率打包您的数据结构。此外,由于处理器不同,您的基本类型(整数,长整数,浮点数等)可能会有不同的大小。
简而言之,需要二进制数据之间跨平台兼容性的程序可以制定非常精确的规则,将结构和值打包成二进制格式(通常在现场,同样精确的读取数据规则。
答案 1 :(得分:1)
如果你没有准确地看到你正在写什么文件以及你如何调用它,很难给出一个真正有用的答案,但如果你使用流插入操作符(也就是格式化的输出操作符)来做你的文件写入,然后根据您的语言环境设置将任何非字符串数据转换为字符串。如果这就是你实际在做的事情,那么使用ofstream::binary
似乎毫无意义,因为你无论如何只是在写文字。
我建议创建一个可能存在差异的最小示例,并在十六进制编辑器中检查输出,看看发生了什么。