读取二进制文件的C ++问题

时间:2018-10-07 12:57:50

标签: binary

早上好,我正在编写一个用于读写二进制文件的C ++代码。我尝试了一个简单的情况,如下所示:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;
    
	
void writeb(string text1)
{
	ofstream outfile("binary.txt", ios::binary);
	if (outfile.is_open())
	{	
	int strlen1=text1.length();
	outfile.write((char*) &strlen1, sizeof(int));
	outfile.write((char*) &text1, strlen1 );  
    outfile.close();
	}
	
	ifstream infile("binary.txt", ios::binary);
	string text2;
	if (infile.is_open())
	{	
	int strlen2=0;
	infile.read((char*) &strlen2, sizeof(int));
	cout << "check " << strlen2 <<" ";
	text2.resize(strlen2);
	infile.read((char*)(&text2), strlen2);
    cout << text2 << endl;
    infile.close(); 
	}
}
void readb()
{
	ifstream infile("binary.txt", ios::binary);
	string text3;
	if (infile.is_open())
	{	
	int strlen3=0;
	infile.read((char*) &strlen3, sizeof(int));
	cout << "read " << strlen3 <<" ";
	infile.read((char*)(&text3), strlen3);
    cout << text3 << endl;
    infile.close();  
	}
}


int main()
{   
    string text = "Hello! How are you?";
	writeb(text);
	readb();   
}

其中有两个功能:一个用于检查已写入内容的二进制文件,另一个仅读取二进制文件。

很遗憾,阅读器功能无法正常工作。

事实上,我得到以下输出:

check 19 Hello! How are you?
read 19 ©zs Ïs ow are you?

尤其似乎是reader函数无法正确读取二进制文件,而writer函数中的check reader可以正常工作。我不明白错误在哪里。 有人可以帮我解决这个问题吗?还是有人可以向我建议其他解决方案,以便在分离的函数中写入和读取二进制文件? 非常感谢你 最好的祝福 DS

2 个答案:

答案 0 :(得分:0)

我相信问题是您的类型转换(char*) &text1。您正在将字符串对象类型转换为char指针。

您应该做的是使用text1.c_str(),这将为您提供字符串对象中包含的实际数据的const char *。

编辑:

您还忘记了在readb函数中调整字符串的大小。

我可能只是使用char *来读取和写入二进制文件,因为您的代码现在正在做的工作是将字符串对象的内容作为二进制文件转储到文件中。

答案 1 :(得分:0)

谢谢你的回答。 希望我能正确理解您的建议,并通过以下方式纠正了代码:

infile.read((char*)(text3.c_str()), strlen3 ); 
cout << text3 << endl; 

infile.read((char*)(&text3), strlen3 );
cout << text3.c_str() << endl;

不幸的是,代码继续给我错误的输出。

非常感谢你 最好的祝福 DS