我做了一件简单的事情:将存储为字符串的图像文件的数据写入包含该字符串的图像文件中。
std::ofstream f("image.jpeg");
f << image_data; // image_data was created using python and copied over, in hex and turned back into ascii
然而,出乎意料的是:
变为:
我无法理解为什么会这样。
当我使用python2.7从原始图片中获取数据并写入时 它到一个新文件,它工作正常。
当我在ubuntu中编译并运行我的程序时,图片出来了 细
当我将大文本文件(大于图像)写入.txt时, 文件很好。
只有Windows上的jpegs失败了。我试过的原始图像是 来自PGP密钥包的图像,其中一半是 一个人头脑清醒,另一半搞砸了。
编译后的程序并没有弄乱所有数据,因为正如我上面所说,显示了一些原始图片。此外,图像大小相同,因此至少保留了jpeg格式。
发生了什么事?我在Windows 7的Code :: Blocks中使用ming2 4.7.2.Windows刚刚疯了吗?
答案 0 :(得分:6)
您必须以二进制模式打开文件:
std::ofstream f("image.jpeg", std::ios::out | std::ios::binary);
// ^^^^^^^^^^^^^^^^