C++ 从二进制文件中读取二进制数据
我正在使用以下行将结构写入文件:C++ 从二进制文件中读取二进制数据,c++,C++,我正在使用以下行将结构写入文件: std::fstream snif::fileHandler; write(reinterpret_cast(rawData),sizeof(rawDataStruct)); 其中rawdataStruct是: typedef struct\u rawData rawDataStruct; 现在,在将结构写入文件后,我使用以下命令从二进制文件的开头读取结构: std::cout没有代码显示它,但是文件是以什么模式打开的?希望它是为二进制配置的。要查看可用选项
std::fstream snif::fileHandler;
write(reinterpret_cast(rawData),sizeof(rawDataStruct));
其中rawdataStruct
是:
typedef struct\u rawData rawDataStruct;
现在,在将结构写入文件后,我使用以下命令从二进制文件的开头读取结构:
std::cout没有代码显示它,但是文件是以什么模式打开的?希望它是为二进制
配置的。要查看可用选项,请查看和。我建议确保设置以下打开模式:
ios::binary | ios::out | ios::in | ios::trunc
根据发生的目的,ios::trunc
(truncate)可能必须替换为ios::app
(append)
在进行一些基本测试时,在我的C++11兼容编译器上发现
fileHandler.write(reinterpret_cast<char*>(rawData), sizeof(rawDataStruct));
编译器应该发出警告,但这取决于编译器版本,以及是否使用了-Wall
选项或更好的选项。这可以解释屏幕输出似乎是如何在最短时间停止的
"going for print data read from file"
信息。读取函数还需要在rawData前面使用和运算符:
snif::fileHandler.read(reinterpret_cast<char*>(&rawData), sizeof(rawDataStruct));
snif::fileHandler.read(reinterpret_cast(&rawData),sizeof(rawDataStruct));
可能正在抛出未捕获的reinterpret\u cast
运算符的运行时异常。在系统和编译器被记录之前,很难知道
此外,如果将rawData
声明为指针,则更好的变量名是pRawData
,并发布更多代码。例如,如果pRawData
从未指向rawDataStruct
的有效实例,则会发生不可预测的情况。在读取之前,您是否检查了snif::fileHandler
是否适合读取(例如使用.fail()
)?如果打开失败,我猜您的程序正在尝试从stdin(文件描述符0)读取数据。如果我执行fileHandler.close(),则在将数据写入文件后忘记打开;在该行之后,std:不会打印任何内容:out@Startup需要打开文件才能写入数据。@0x499602D2很抱歉,我没有提供代码hear,因为我打开了文件,如果我检查了文件的大小,它会因为写入而增大。@Startup请参阅rawData
前面关于&
运算符的修改。
snif::fileHandler.read(reinterpret_cast<char*>(&rawData), sizeof(rawDataStruct));