Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从二进制文件中读取二进制数据_C++ - Fatal编程技术网

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));