比如有这样一个buffer:
BYTE b[1024];这个缓冲区是从一个二进制文件中读取出来的,当然,其中也包含一些可见字符。我现在要找出这个数组中,有没有"Test"这样一个字符串。如果有,要知道它的位置。不知道我有没有说清楚。ue就有这样的功能,当然ue不但可以查找字符串,也可以查找二进制串。我目前能想到的办法,就是一个字节一个字节去比较,现在想请教一下大家,有没有其他好的办法??
BYTE b[1024];这个缓冲区是从一个二进制文件中读取出来的,当然,其中也包含一些可见字符。我现在要找出这个数组中,有没有"Test"这样一个字符串。如果有,要知道它的位置。不知道我有没有说清楚。ue就有这样的功能,当然ue不但可以查找字符串,也可以查找二进制串。我目前能想到的办法,就是一个字节一个字节去比较,现在想请教一下大家,有没有其他好的办法??
CString str(b);int res = str.FindOneOf("Test");
char * strSrc = "Test";
int i = 0;
while(!memcmp(&b[i], strSrc, sizeof(strSrc)))
{
i++;
}没有测试过!!!~~
while(1)
{
if(!memcmp(&b[i], strSrc, sizeof(strSrc)))
break;
i ++;
}
原型:extern int memcmp(void *buf1, void *buf2, unsigned int count);
这个函数可以实现你的要求另:nelsonc(软件兔)
不知道你所说的wildwind_ssj(野风) 的方法 速度有什么问题,时间复杂度是O(n)(n为buffer的长度),顶多用二分查找提高一下,不过我觉得一般没这个必要,因为只是针对一buffer
{
if(!memcmp(&b[i], strSrc, strlen(strSrc)))
break;
i ++;
}
也就是说,如果每次memcmp都是查到最后一个字节时发现是错的,那就慢了。
比如,在"aaaaaa...aaab"中查找"aaaab"时,就会发生这种情况。而较好的算法可以得到o(m+n)的时间复杂度。(实际上还有更快的)由于这个算法比较复杂,这里也说不清楚。好在很多数据结构的书上都有的。找找看吧。
程序大概就50行左右吧。