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

标签 c++ binary buffer

这是我的 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/

相关文章:

c++ - 返回引用后,数组中的值(它是对象的属性)被垃圾替换

c++ - 使用 SFINAE 检查函数是否为 constexpr

组件(TASM): print the sum of certain bits in bytes

c - 如何从缓冲区中逐字读取仅由 ":"分隔的内容?

c++ - 将二进制数据读入 std::string C++

android - ArcGIS 在 android 中使用 GeometryServer 创建缓冲区

c++ - 如何在共享库中链接 log4cplus.a?

c++ - 如何对 STL vector 进行排序?

c - 在 C 中使用按位运算和指针算法将二进制转换为无符号整数

php - PHP 文件的 FTP 传输类型 - 二进制传输适用于 PHP 文件吗?