我正在编写一些串行端口代码,需要将文件的内容(二进制)读取到变量中。从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 个字符。