【发布时间】:2018-11-28 23:58:03
【问题描述】:
我有一个二进制文件要读取,文件内部是非固定长度的数据,但它们确实有开始和停止序列。
起始序列为 0x1B 0x5B 0x30 0x48
停止序列为 0x1b 0x5B 0x31 0x48
这个特定的文件确实有 28 个条目,想想有多少条目可能不同。
我已经将二进制文件读入到文件大小的向量
ifstream datafile("myfile.bin", ios_base::in|ios_base::binary);
vector<char> buff;
int size = datafile.tellg();
buff.resize(size);
datafile.read(buff.data(), size);
现在我尝试逐字节迭代向量(因为这就是它存储在向量中的方式,对吧?但这不是我想要的。
阅读将数据写入另一个(临时)变量的向量然后在我看到停止序列时停止写入它会很好。然后继续处理向量的其余部分,写入另一个变量,直到看到下一个停止序列等。就像写入vector<vector<char>> ?
以下是我逐字节进行的迭代。
for (vector<char>::iterator it = buff.begin(); it != buff.end(); ++it)
{
if (*it == 0x1B)
{
// found ESC char
}
}
我如何设置从二进制文件读取,写入字节直到停止序列,然后重复文件的其余部分?
【问题讨论】:
-
如果我理解正确,您希望将整个文件读入内存,然后将每组开始/结束标记之间的字节提取到它们自己的缓冲区中?听起来很简单,你在哪一部分遇到了麻烦?
标签: c++ linux binary byte ifstream