将可执行文件加载到字符向量后数据无效
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());
我正在尝试加载 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());