这是我的 C++ 作业。给定一个二进制文件,该文件由一些数据单元组成。每个数据单元包含两部分。第一部分是 1 char
,第二部分是 1 int
。一次将整个文件读入缓冲区,然后从缓冲区中提取所有数据单元。
现在我已经像这样成功地将文件读入缓冲区:
char* readBinaryFile(const char* fileName) {
ifstream file(fileName, ios::binary || ios::ate);
// get the size of file
streampos beg, end;
beg = file.tellg();
file.seekg(0,ios::end);
end = file.tellg();
long size = end - beg;
char* buffer = new char[size];
// now read the file into buffer
file.seekg(0, ios::beg);
file.read(buffer, size);
file.close();
return buffer;
}
所以我的问题是如何从缓冲区中获取数据单元?
最佳答案
我不会为您编写代码,但请考虑一下...
buffer[0]
是您的第一个字符。从 buffer[1]
到 buffer[4]
是您的第一个整数。它重复,所以 buffer[5]
是第二组数据的字符。
character和int一共有五个字节。如果您知道已读取的数据量,则可以将其除以 5 并知道有多少“组”数据。
您现在可以使用类似 for
循环的东西从零迭代到集合数减一。假设这个迭代器变量是 i
,那么您可以使用 buffer[i * 5]
访问每个“数据集”的字符,即 int 的第一个字节buffer[i * 5 + 1]
等
因此,for 循环和一点数学知识将帮助您从该缓冲区中提取信息。你将有 5 个单独的字节,你需要将其中的 4 个字节重新组合成一个 int。有多种方法可以实现这一点,我会让您尝试发现。
关于c++ - 将整个二进制文件读入缓冲区,然后以特定格式解析它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52490082/