我以
byte[] bData = new byte[1024];
FS.Read(bData, 0, bData.Length);读取文件数据内容到bData比特数组中。
现在,我想知道,这个bData中,是否存在“0x00,0x16,0x88,0xff,0xff" 16进制数?如何查找,如何比较?

解决方案 »

  1.   

    if(Array.IndexOf(bData,0x00) > -1)
    {
        //存在
    }
      

  2.   

    直接使用==,或者使用Equals方法都是不行的,如果要比较两个byte[]数组是否相等,可以使用下面这个函数:/// <summary>
        /// 比较两个字节数组是否相等
        /// </summary>
        /// <param name="b1">byte数组1</param>
        /// <param name="b2">byte数组2</param>
        /// <returns>是否相等</returns>
        private bool PasswordEquals(byte[] b1, byte[] b2)
        {
            if (b1.Length != b2.Length) return false;
            if (b1 == null || b2 == null) return false;
            for (int i = 0; i < b1.Length; i++)
                if (b1[i] != b2[i])
                    return false;
            return true;
        }
      

  3.   

    是这样的,我bData是取得文件中的数据,比较大,
    这段数据里是否存在“0x00,0x16,0x88,0xff,0xff" 16进制数?
      

  4.   

    // 在 s 中查找 pattern 。
    // 如果找到,返回 pattern 在 s 中第一次出现的位置(0起始)。
    // 如果没找到,返回 -1。
    static int IndexOf(byte[] s, byte[] pattern) 

      int slen = s.Length;
      int plen = pattern.Length;
      for (int i = 0; i <= slen - plen; i++) 
      { 
        for (int j = 0; j < plen; j++) 
        { 
          if (s[i + j] != pattern[j]) break;
        }
        if (j == plen) return i;
      }
      return -1;
    }
      

  5.   

      // 在 s 中查找 pattern 。
      // 如果找到,返回 pattern 在 s 中第一次出现的位置(0起始)。
      // 如果没找到,返回 -1。
      static int IndexOf(byte[] s, byte[] pattern) 
      { 
        int slen = s.Length;
        int plen = pattern.Length;
        for (int i = 0; i <= slen - plen; i++) 
        { 
          for (int j = 0; j < plen; j++) 
          { 
            if (s[i + j] != pattern[j]) goto next;
          }
          return i;
          next:;
        }
        return -1;
      }
      

  6.   

    byte[] bthex={0x00,0x16,0x88,0xff,0xff};static void SearchApp(byte[] arr, byte[] arrhex)
            {
                ArrayList btResult = new ArrayList(); ;//定义一个动态数组存储在arr中存在的arrhex中的值
                int k = 0;//k用来记录arr和arrhex中相同的元素个数
                for (int i = 0; i < arrhex.Length; i++)
                {
                    for (int j = 0; j < arr.Length; j++)
                    {
                        if (arrhex[i] == arr[j])
                        {
                            btResult.Add(arrhex[i]);
                            k++;
                        }
                        continue;
                    }
                }
            }
    //调用此方法后,打印k值,如果k=0,则不存在,否则证明存在,存在的元素存放在btResult数组中
     foreach(byte s in btResult)
                {
                    Console.WriteLine(s);
                }
    //打印存在项
      

  7.   

    循环数组,找到0x00之后,看接下来的几个byte是否为0x16,0x88,0xff,0xff,注意不要越界~
      

  8.   


    调用方法第一个参数是bData,第二个参数是bthex