非常感谢您的帮助!
我正在学习C++。我的第一个项目是为实验室使用的二进制文件格式编写解析器。我已经在Matlab中使用"fread"轻松地编写了一个解析器,看起来这可能也适用于我在C++中尝试做的事情。但从我所读到的资料来看,似乎使用ifstream是推荐的方法。
我的问题有两个方面。首先,使用ifstream相比fread有什么优点?
其次,我该如何使用ifstream来解决我的问题?这就是我要做的事情。我有一个包含一组整数、浮点数和64位整数的结构化二进制文件。总共有8个数据字段,我想将每个字段读入其自己的数组中。
数据的结构如下,在重复的288字节块中:
Bytes 0-3: int
Bytes 4-7: int
Bytes 8-11: float
Bytes 12-15: float
Bytes 16-19: float
Bytes 20-23: float
Bytes 24-31: int64
Bytes 32-287: 64x float
我能够使用fstream读取文件并将其存储为char*数组。
char * buffer;
ifstream datafile (filename,ios::in|ios::binary|ios::ate);
datafile.read (buffer, filesize); // Filesize in bytes
所以,从我的理解来看,我现在有一个指向名为“buffer”的数组的指针。如果我调用buffer [0],我应该得到一个1字节的内存地址,对吗?(但是,我却得到了段错误。)
现在我需要做的事情真的应该非常简单。在执行以上ifstream代码后,我应该有一个相当长的缓冲区,其中填充了许多1和0。我只想能够从内存中读取这些内容,每次读取32位,根据我当前正在处理的4字节块将其转换为整数或浮点数。
例如,如果二进制文件包含N个288字节的数据块,则我提取的每个数组都应该有N个成员。 (除了最后一个数组,它将有64N个成员。)
由于我已经将二进制数据存储在内存中,因此基本上我只想从缓冲区中一次读取一个32位数字,并将结果值放置在适当的数组中。
最后 - 我能否像Matlab那样同时访问多个数组位置?(例如,array(3:5)-> [1,2,1],对于array = [3,4,1,2,1])