在 C++(Visual C++ MFC)中,我有char *
来自数据库的。这实际上是一张图片。PostgreSQL 将它作为 char * 返回,因为 C++ 中没有 byte[] (据我所知-yet-:))
问题是,我尝试像这样写那个图像:
ofstream myFile ("C:\\picture.jpg", ios::out | ios::binary);
myFile.write(contents, size);
myFile.close();
它输出如下:
\xffd8ffe000104a46494600010101006000600000ffe1005a4578696600.......
我试图将内容更改为reinterpret_cast<char *>(&contents)
然后我得到了一些二进制数据,但只有少数。其余的不在文件中。
我也试过这个:
fstream binary_file("C:\\picture.jpg", ios::out | ios::binary | ios::app);
binary_file.write(reinterpret_cast<char *>(&contents),size);
binary_file.close();
无论有reinterpret_cast<char *>(&contents)
没有它。文件中仍然有几个字节数据。不再。
我也尝试过改变size
。大小来自 postgresql 的PQgetlength
方法,所以这是肯定的。(不会错吧?)
我终于给size
了自己,对 C++ 说它是5000
. 它输出 5.000 的二进制数据,但事实是,它与原始文件不符。它以“h”开头,然后是不同的东西......
我还尝试将这些数据加载到 Chilkat 的 ByteArray,然后使用它的 oen 文件访问方法写入。仍然得到相同的结果\xfdd...
。
那么,主要目标是什么?我在这里想念什么?任何帮助将不胜感激。
编辑:它是char *。我为我的误会道歉。
结论:由于我的需要,我选择了Craig Ringer * 的解决方案。但由于这个问题的性质,我选择H2CO3的答案作为公认的答案。