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