首页 > 解决方案 > 将可执行文件加载到字符向量后的数据无效

问题描述

我正在尝试加载一个可执行文件(.exe),vector<char>但从未加载完整的数据,只有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();

标签: c++arrayswindowsvectorifstream

解决方案


给定vector<char> buffer然后buffer.data()返回一个char*。因此ofs << buffer.data()向流发送一个 char 指针。char 指针的<<重载将其作为字符串处理 - 以空终止符结尾的字符序列。这不是您处理任意字节集(例如 .exe 文件的内容)所需要的。所以你的输出在第一个空字节处停止。

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

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

推荐阅读