这是我的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
所以我的问题是如何从缓冲区中获取数据单元?
答案 0 :(得分:1)
我不会为您编写代码,但请稍后考虑...
在C:\Program Files\Microsoft SDKs\Azure.NET SDK\
是您的第一个字符。从buffer[0]
到buffer[1]
是您的第一个整数。它会重复,因此buffer[4]
是第二组数据的字符。
字符和int总共有五个字节。如果您知道所读取的数据量,则可以将其除以5,然后知道其中有“数据集”的数量。
您现在可以使用类似buffer[5]
的循环,从零迭代到集数减一。假设此迭代器变量为for
,则可以使用i
,buffer[i * 5]
处的int的第一个字节等访问数据的每个“集合”的字符。
因此,一个for循环和一些数学运算将帮助您从该缓冲区中提取信息。您将拥有5个单独的字节,并且需要将其中的4个字节重组为一个int。有多种方法可以做到这一点,我将让您尝试发现。
答案 1 :(得分:0)
您的问题可能源于您正在使用的事实吗?
ios::binary || ios::ate
当我认为您的意思是:
ios::binary | ios::ate
由于二进制逻辑或末尾为“ true”,因此前者的值为“ 1”,而后者是一个位掩码,表示“以二进制方式打开该文件,并在末尾”。您编写的方式实际上等同于
ios::app