c++ - 二进制文件在 Windows 上比在 Linux 上小

标签 c++ file binary

我正在开发一个将二进制数据写入文件的程序。由于某些原因,在 Windows 上生成的文件比在 Linux 上略小。以字节为单位的大小和 MD5 哈希值都不同。同样的代码怎么会发生这种情况?

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

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

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

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

最佳答案

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

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

关于c++ - 二进制文件在 Windows 上比在 Linux 上小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8169545/

相关文章:

c++ - 如何使用 Microsoft Visual C++ 2010 通过 MATLAB 7.10 (R2010a) 创建 MEX 文件?

java - 如何将类的目标文件与源文件链接

c++ - 在 osx 上将已安装的卷识别为 CD/DVD

c++ - 是否有任何关键字可以在模板化派生类中重新定义模板化基类的 "all"方法?

c++ - 使用 C++ 在一行中读取多种数据类型

c - 如何删除二进制文件中的元素?

swift - 使用 AVAudioPlayer 播放本地音频文件

php - 从 MySQL 流式传输二进制文件以使用 PHP 下载

ios - 卡在 "Developer Rejected"上,我无法上传新的二进制文件

Java:Java 思维第四版。为什么要在这里使用十六进制?