将整个二进制文件读入缓冲区,然后以特定格式解析

时间:2018-09-25 03:15:08

标签: c++ binary buffer

这是我的C ++作业。给定一个二进制文件,该文件包含一些数据单元。每个数据单元包含两个部分。第一部分为1 static void Main(string[] args) { int[] sArray = new int[]{1,2,3}; SomeMethod(sArray[0]); SomeMethod(sArray[1]); SomeMethod(sArray[2]); SomeMethod(sArray[3]); } static void SomeMethod(int? s) => Console.WriteLine(s.HasValue); ,第二部分为1 char。一次将整个文件读入缓冲区,然后从缓冲区中提取所有数据单元。 现在,我已成功将文件读取到缓冲区中,如下所示:

int

所以我的问题是如何从缓冲区中获取数据单元?

2 个答案:

答案 0 :(得分:1)

我不会为您编写代码,但请稍后考虑...

C:\Program Files\Microsoft SDKs\Azure.NET SDK\是您的第一个字符。从buffer[0]buffer[1]是您的第一个整数。它会重复,因此buffer[4]是第二组数据的字符。

字符和int总共有五个字节。如果您知道所读取的数据量,则可以将其除以5,然后知道其中有“数据集”的数量。

您现在可以使用类似buffer[5]的循环,从零迭代到集数减一。假设此迭代器变量为for,则可以使用ibuffer[i * 5]处的int的第一个字节等访问数据的每个“集合”的字符。

因此,一个for循环和一些数学运算将帮助您从该缓冲区中提取信息。您将拥有5个单独的字节,并且需要将其中的4个字节重组为一个int。有多种方法可以做到这一点,我将让您尝试发现。

答案 1 :(得分:0)

您的问题可能源于您正在使用的事实吗?

ios::binary || ios::ate

当我认为您的意思是:

ios::binary | ios::ate

由于二进制逻辑或末尾为“ true”,因此前者的值为“ 1”,而后者是一个位掩码,表示“以二进制方式打开该文件,并在末尾”。您编写的方式实际上等同于

ios::app