将可执行文件加载到char向量后,数据无效

问题描述

我正在尝试在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());