C++ ofstream输出到图像文件在Windows上写入不同的数据

cal*_*pto 3 c++ image ofstream windows-7

我做了一件简单的事情:将存储为字符串的图像文件的数据写入包含该字符串的图像文件中.

std::ofstream f("image.jpeg");
f << image_data; // image_data was created using python and copied over, in hex and turned back into ascii
Run Code Online (Sandbox Code Playgroud)

然而,出乎意料的是:

好照片

变为:

坏图片

我不明白为什么会这样.

当我使用python2.7从原始图片中获取数据并将其写入新文件时,它工作正常.

当我在ubuntu中编译并运行我的程序时,图片很好.

当我将一个大文本文件(大于图像)写入.txt时,该文件很好.

只有Windows上的jpegs失败了.我尝试的原始图像是来自PGP密钥包的图像,其中一半的人头部清晰,另一半混乱.

编译后的程序并没有弄乱所有数据,因为正如我上面所说,显示了一些原始图片.此外,图像大小相同,因此至少保留了jpeg格式.

怎么了?我在Windows 7的Code :: Blocks中使用ming2 4.7.2.Windows刚刚疯了吗?

Mar*_*cia 6

您必须以二进制模式打开文件:

std::ofstream f("image.jpeg", std::ios::out | std::ios::binary);
//                                            ^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

  • 也许在Windows上,`\n`被翻译成`CR-LF`? (4认同)