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

Invalid data after load executable file to char vector

我正在尝试加载 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()returns一个char*。因此 ofs << buffer.data() 正在向流发送一个字符指针。 char 指针的 << 重载将其作为字符串处理 - 以空终止符结尾的字符序列。这不是您处理任意字节集(例如 .exe 文件的内容)所需要的。所以你的输出在第一个空字节处停止。

您需要以不同的方式将数据发送到输出流。 write 函数应该可以工作。例如:

ofs.write(buffer.data, buffer.size());