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

Posted

技术标签:

【中文标题】C++ 读取二进制文件的问题【英文标题】:C++ problems to read binary files 【发布时间】:2018-10-07 12:57:50 【问题描述】:

早上好,我正在编写用于读写二进制文件的 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

【问题讨论】:

【参考方案1】:

谢谢你的回答。 我希望我能正确理解您的建议,并使用以下代码更正了代码:

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

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

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

非常感谢 最好的祝福 搜索引擎

【讨论】:

【参考方案2】:

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

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

编辑:

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

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

【讨论】:

以上是关于C++ 读取二进制文件的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中读取 .dat 二进制文件(深度图)

像在 python 中一样在 C++ 中读取二进制文件

使用 Numpy 读取使用 C++ 数据类型生成的二进制文件

用C++写的二进制文件,用JAVA怎么读取?

在 C++ 中为结构读取二进制文件的运行时错误

0xC0000005 读取二进制文件时抛出异常(C++)