不懂,strstr不行吗,你把二进制串也看成字符串

解决方案 »

  1.   

    没有,你可以用memcmp从头开始循环比较来实现。
      

  2.   

    这样是不行的,因为strstr比较的时候以空字符为结束,所以当二进制中间
    有空字符(二进制为“00”)的时候,比较到中间就停下来了,不能再往下
    比较,我想全部比较。
      

  3.   

    z_sky(),可以举个例子吗?
      

  4.   

    不会吧,二进制中间的“0”是0x30 , 又不是0x00(NULL)怎会不行呢?
      

  5.   

    好吧,现写个给你,也许有错,仅供参考:
    void *memmem(void *mem1, int len1, void *mem2, int len2)
    {
        if (len1<len2) return NULL;
        for(int i=0;i<len1-len2;i++)
            if (memcmp(mem1+i,mem2,len2)==0) return mem1+i;
        return NULL;
    }
      

  6.   

    好吧,现写个给你,也许有错,仅供参考:
    void *memmem(void *mem1, int len1, void *mem2, int len2)
    {
        int i;
        for(i=0;i<=len1-len2;i++)
            if (memcmp(mem1+i,mem2,len2)==0) return mem1+i;
        return NULL;
    }
      

  7.   

    我就是指所要比较的二进制里面一旦有0X00(NULL) Strstr()就不能再比较下去啊。怎么办??
      

  8.   

    好吧,现写个给你,也许有错,仅供参考:
    void *memmem(void *mem1, int len1, void *mem2, int len2)
    {
        int i;
        for(i=0;i<=len1-len2;i++)
            if (memcmp(mem1+i,mem2,len2)==0) return mem1+i;
        return NULL;
    }
      

  9.   

    开玩笑,0x00 == “\n" ,表示字符串结束。你假设字符串中存在0x00那是字符串的问题,关strstr()什么事,在说有0x00(NULL)(\n)的话msdn的函数都会停。当然可以写一个,但遇到了0x00瘟神们不停下来。