问题描述
我有一个函数,两个函数,在 C++ 中写入和读取二进制文件。
void save_ascII(string ascII_text,string filename)
{
ofstream fout;
fout.open(filename,ofstream::binary);
size_t input_size = ascII_text.size();
if (fout.is_open())
{
fout.write(reinterpret_cast<char*>(&input_size),sizeof(input_size));
fout.write(reinterpret_cast<char*>(&input_size),input_size);
fout.close();
}
}
void read_ascII(string filename)
{
string read_input;
ifstream fin(filename,fstream::binary);
size_t read_size;
if (fin.is_open())
{
fin.read(reinterpret_cast<char*>(&read_size),sizeof(read_size));
read_input.resize(read_size);
fin.read(&read_input[0],read_size);
fin.close();
}
}
问题在于,当它从二进制文件中读取时,它只是内存中的虚拟数据。
When it reads from the binary file,it shows:
►╠╠╠╠╠╠╠╠▄²A
任何建议都非常感谢。
解决方法
在您的代码中,
size_t input_size = ascII_text.size();
if (fout.is_open())
{
fout.write(reinterpret_cast<char*>(&input_size),sizeof(input_size));
fout.write(reinterpret_cast<char*>(&input_size),input_size); //<--bug
fout.close();
}
而不是标有 bug<--
的行,您需要
fout.write(ascII_text.data(),input_size);