问题描述
我正在尝试在vector<char>
中加载可执行文件(.exe),但从未加载完整的数据,仅加载了 MZx 字符串。如何解决?
vector<char> buffer;
ifstream infile;
infile.open("putty.exe",ios::binary);
infile.seekg(0,ios::end);
size_t file_size_in_byte = infile.tellg();
buffer.resize(file_size_in_byte);
infile.seekg(0,ios::beg);
infile.read(&buffer[0],file_size_in_byte);
infile.close();
cout << buffer.data() << endl;
ofstream ofs("data.bin",ofstream::out);
ofs << buffer.data();
ofs.close();
解决方法
给出vector<char> buffer
,然后buffer.data()
返回char*
。因此ofs << buffer.data()
正在向该流发送一个char指针。 char指针的<<
重载将其作为字符串处理-以空终止符结尾的字符序列。这不是处理任意字节集(例如.exe文件的内容)所需要的。因此,您的输出将从第一个空字节停止。
您需要以其他方式将数据发送到输出流。 write函数应该起作用。例如:
ofs.write(buffer.data,buffer.size());