【发布时间】:2012-05-09 06:10:41
【问题描述】:
我正在编写一些串行端口代码,需要将文件的内容(二进制)读取到变量中。 从http://www.cplusplus.com/doc/tutorial/files/ 的“二进制文件”示例开始, 我尝试打开一个 .jpg 文件:
#include <iostream>
#include <fstream>
using namespace std;
ifstream::pos_type size;
char * memblock;
int main () {
ifstream file ("example.jpg", ios::in|ios::binary|ios::ate);
if (file.is_open())
{
size = file.tellg();
memblock = new char [size];
file.seekg (0, ios::beg);
file.read (memblock, size);
file.close();
cout << memblock << endl;
delete[] memblock;
}
else cout << "Unable to open file";
return 0;
}
但是,控制台只打印前 4 个字符(32 位)。
但特别奇怪的是,使用 ostream::write() 和那个所谓的错误变量“memblock”可以完美地工作:
ofstream fileOut ("writtenFile.jpg",ios::out|ios::binary);
fileOut.write(memblock,size);
fileOut.close();
即它会创建一个新的 .jpg 文件。
所以我的问题是为什么 memblock 变量 似乎 只包含前 4 个字符。
【问题讨论】:
标签: c++ binaryfiles