c++ - 查找二进制文件中所有出现的字节序列

标签 c++ std

请帮助我了解如何使用 std::search 获取二进制文件中所有出现的 {0x00, 0x00, 0x00, 0x01}。

下面的代码找到第一个匹配项:

std::string NAL = "\x00\x00\x00\x01";
std::ifstream source("somedata.dat", std::ios::binary);
std::istream_iterator<unsigned char> begin(source), end, currNAL;
currNAL = std::search(begin, end, NAL.begin(), NAL.end());

我不明白如何在 while 循环中使用 std::search

最佳答案

由于 std::search() 返回第一次出现的迭代器,您可以只使用第一次出现作为您的(非包含)起点再次搜索。

while(currNAL != source.end()){
    currNAL = std::search(++currNAL, end, NAL.begin(), NAL.end());
    //Increment some counter here?
}

我应该指出,这是未经测试的代码,我并不是说这是针对您具体问题的精确解决方案,只是为了演示这个想法。

关于c++ - 查找二进制文件中所有出现的字节序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57894396/

相关文章:

c++ - C++ 中的 Json : Parse a number as a string to avoid floating-point inaccuracy

c++ - MSVC中自动生成FMA指令

c++ - 如何将 SECURITY_ATTRIBUTES 与 CreateProcess() 一起使用?

c++ - 在 Visual Studio 2012 之后安装 Visual Studio 2010

c++ - 你如何在 XCode + C++ 中使用 std::vector?

c++ - priority_queue - 删除不在顶部的元素

c++ - 分区飞盘 C++

c++ - 使用 boost 或 STL 对 C++ 中的压缩(锁定)容器进行排序

c++ - 特定 std::bind 返回的数据类型到底是什么?

c++ - Visual Studio : Global namespace takes precedence over local