如何在另一个字节数组中找到一个字节数组

时间:2011-11-24 13:13:23

标签: c++ c

我不能使用strstr,memchr因为数组可以包含任意数量的\ 0字符,是否有任何有效的方法可以做到这一点?我必须找到所有位置(索引)或指针。

4 个答案:

答案 0 :(得分:6)

C ++中的小菜一碟:

#include <string>

const std::string needle = get_byte_sequence();
const std::string haystack = get_data();


std::size_t pos = haystack.find(needle);

// found if pos != std::string::npos

另一种选择是使用通用算法:

#include <algorithm>

std::string::const_iterator it = std::search(data.begin(), data.end(), needle.begin(), needle.end());

if (it != data.end())
{
  // needle found at position std::distance(data.begin(), it);
}
else
{
  // needle not found
}

请记住,C ++ string对象可以包含任意数据。要从字节缓冲区创建字符串,请将其大小传递给构造函数:

char buf[200];   // fill with your data; possibly full of zeros!

std::string s(buf, 200); // no problem

答案 1 :(得分:1)

也许,你应该看看std::search? (还有memem,但我不认为它非常便携。

答案 2 :(得分:0)

如果您希望遇到空字符,请使用标准函数memcmp(const void *,const void *,size_t)。

答案 3 :(得分:0)

对我来说正常工作

bool BinScanner::FindSequence(const unsigned char * pSeq, unsigned long ulSeqSize)
{
    const unsigned char* pFindRes = std::search(pCurr, pEnd, pSeq, pSeq+ulSeqSize);
    if (pFindRes != pEnd)
    {
        return true;
    }
}