如何对二进制数据进行字符串查找?

C20062222 2007-03-13 02:46:59
从一个二进制文件中读取的二进制数据,如何查找其中的是否包含某个字符串?
难道还要自己一个一个的比较?比较头大,字符串遇到/0就结束了
...全文
486 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
C20062222 2007-03-13
  • 打赏
  • 举报
回复
strstr函数根本不可以,原因如下:
strstr实现如下:
static const char* _strstr(const char* s1, const char* s2)
{
assert(s2 && s1);
const char* p=s1, *r=s2;
while(*p!='\0')
{
while(*p++==*r++);
if(*r=='\0')
return p;
else
{
r=s2;
p=++s1;
}
}
return NULL;
}

由实现可以看出,函数遇到\0就结束了,从文件中读的数据可是有\0的
whoho 2007-03-13
  • 打赏
  • 举报
回复
if (pt != buf+20)
{
//找到了
}
else
{
//没有相应二进制子串
}
whoho 2007-03-13
  • 打赏
  • 举报
回复
std::search如:

#include <algorithm>

char buf[20] = "\x0\x3\x6\x0\x7";
char pattern[3] = {'\x6', '\x0', '\x7'};

char *pt = std::search(buf, buf+20, pattern, pattern+3);
Jokar 2007-03-13
  • 打赏
  • 举报
回复
对于简单的ASCII序列来说,二进制数据读进来后 正好是字符串对应的一个一个byte,也就是字符的ASCII码值的顺序序列呀,用现成的函数就可以了,和文本文件读出来的处理方式没太大区别。就用strstr吧
todototry 2007-03-13
  • 打赏
  • 举报
回复
okokok
fengfan 2007-03-13
  • 打赏
  • 举报
回复
好像是用strstr

我用这个的时候好像是可以越过 \0 继续查找的.

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧