public void computeDigest(byte[] b)
   {
      currentAlgorithm.reset();
      currentAlgorithm.update(b);
      byte[] hash = currentAlgorithm.digest();
      String d = "";
      for (int i = 0; i < hash.length; i++)
      {
         int v = hash[i] & 0xFF; /****The Problem****/
         if (v < 16) d += "0";
         d += Integer.toString(v, 16).toUpperCase() + " ";
      }
      digest.setText(d);
   }上面这段代码中,觉得语句 v = hash[i] & 0xFF 纯属多余,可能我是错误的,请教!!

解决方案 »

  1.   

    int v = hash[i] & 0xFF; /****The Problem****/
    这是要保证转换为int的时候,高位全部为0,也就是说hash[i]为负数的时候,会转为正数。
    for example
    byte b = -5;
    int i = b & 0xFF; //这里的结果只有低8位,高位全部为0(int为4个字节32位)
    System.out.println(i); //所以变为正数int j = b & 0xFFFFFFFF; //高位也进行运算,那么符号为会被保留
    System.out.println(j); //所以这里还是负数