比如有这样一个buffer:
BYTE b[1024];这个缓冲区是从一个二进制文件中读取出来的,当然,其中也包含一些可见字符。我现在要找出这个数组中,有没有"Test"这样一个字符串。如果有,要知道它的位置。不知道我有没有说清楚。ue就有这样的功能,当然ue不但可以查找字符串,也可以查找二进制串。我目前能想到的办法,就是一个字节一个字节去比较,现在想请教一下大家,有没有其他好的办法??

解决方案 »

  1.   

    BYTE b[1024];
    CString str(b);int res = str.FindOneOf("Test");
      

  2.   

    应该是需要1个字节一个字节的去找,先找'T',找到看下一个字节是不是'e',不是则继续,直到找到或者整个buffer搜索完毕。
      

  3.   

    看看 thinking in c++ 。里面很详细
      

  4.   

    BYTE b[1024];
    char * strSrc = "Test";
    int i = 0;
    while(!memcmp(&b[i], strSrc, sizeof(strSrc)))
    {
      i++;
    }没有测试过!!!~~
      

  5.   

    错了
    while(1)
    {
       if(!memcmp(&b[i], strSrc, sizeof(strSrc)))
            break;
       i ++;
    }
      

  6.   

    memcmp 
      
      原型:extern int memcmp(void *buf1, void *buf2, unsigned int count);
    这个函数可以实现你的要求另:nelsonc(软件兔) 
    不知道你所说的wildwind_ssj(野风) 的方法 速度有什么问题,时间复杂度是O(n)(n为buffer的长度),顶多用二分查找提高一下,不过我觉得一般没这个必要,因为只是针对一buffer 
     
      

  7.   

    while(i < sizeof(b)-strlen(strSrc)+1)
    {
       if(!memcmp(&b[i], strSrc, strlen(strSrc)))
            break;
       i ++;
    }
      

  8.   

    在最坏的情况下,这个算法的复杂度是o(m*n),m是被查找的串长度,n是查找的串长度。
    也就是说,如果每次memcmp都是查到最后一个字节时发现是错的,那就慢了。
    比如,在"aaaaaa...aaab"中查找"aaaab"时,就会发生这种情况。而较好的算法可以得到o(m+n)的时间复杂度。(实际上还有更快的)由于这个算法比较复杂,这里也说不清楚。好在很多数据结构的书上都有的。找找看吧。
    程序大概就50行左右吧。