private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

public static String byteArrayToString(byte[] is)
{
int i = is.length;
char[] chars = new char[i * 2];
int j = 0;
int k = 0;
while (j < i)
{
int p = is[j++];
chars[k++] = HEX_DIGITS[p >>> 4 & 0xf];
chars[k++] = HEX_DIGITS[p & 0xf];
}
return new String(chars);
}这段程序不明白最后怎么就把数组拼装成String了,谁能给讲讲,谢了!

解决方案 »

  1.   

    整段程序是把byte[] is转化成16进制字符串(每个byte两个字符表示)while (j < i) { 
       int p = is[j++]; //按顺序取byte[] is的每个字节
       chars[k++] = HEX_DIGITS[p>>>4 & 0xf]; //得到p的高4比特(0~15),转化成字符0~F
       chars[k++] = HEX_DIGITS[p & 0xf]; //获得p的低4个比特
    }
    return new String(chars); //根据数组构造String
      

  2.   

    比如十进制的13,10 等于0xD,0xA
    如果你想显示在屏幕上,你是希望显示
    1 一个换行
    2 还是 0D0A 呢如果你希望显示0D0A 那就就用那段代码
      

  3.   

    HEX_DIGITS[p >>> 4 & 0xf] “p >>> 4 & 0xf”是char数组的下标吧?一个 char数组的下标为什么能这样书写不是很明白,能帮解释一下吗?0xf 又表示什么意思呢?
      

  4.   

    一个char数组的下标为什么能这样书写不是很明白,能帮解释一下吗?
    =====================================
    这是Java语法支持的,数组下标是返回值为int的表达式。至于为什么这样,我是没能力解释了。
      

  5.   

    这段代码的意图是 将一个 byte 数组中的元素都分别转换成 十六进制的字符串表现形式吧?
    =====================================
    chars[k++] = HEX_DIGITS[p>>>4 & 0xf];
    chars[k++] = HEX_DIGITS[p & 0xf]; 
    =====================================
    其中这两段代码是将 byte 数组中的某个元素转换成 “xx”[即 "0D"(表示13),"14"(表示20).. ] 形式吧?那谁能帮解释一下 为什么以 “p>>>4 & 0xf”(p向左位移4后 “按位与”0xf 的数值) 为下标的 HEX_DIGITS 的值必定对应 "xx" 形式中的前一个"x"。 而以 "p & 0xf" 为下标的 HEX_DIGITS 的值必定对应 "xx" 形式中的后一个"x"。 这相当于一个公式,一个定式吗?这是什么原理呢?
      

  6.   

    我的意思是为什么不直接这样:
    public   static   String   byteArrayToStrin(byte[]   is)
    {
       int   i   =   is.length;
       int   j   =   0;
       StringBuffer sb = new StringBuffer();
       while   (j   <   i)
      {
      
       sb.append(is[j++]);
       
       }
       return   sb.toString();
    } 还有查来查去? 
      

  7.   

    由左到右依次截取字节流(byte[]数组)半个字节(0xf)
    存入新的chars数组 最后返回一个String
      

  8.   

    补充:所截半个字节范围是'0'~'F' 作为HEX_DIGITS数组下标
    得到数组对应值后存入chars数组
      

  9.   

    ...想知道 所以然的话
    大可以自己写个WINDOWS出来
    我们其实都是在做逻辑层上的事情 
    有立志算法的就去搞算法 不过怎么看结构还是比算法重要
    象这样的位运算 最终目的只为了要一个输出 也就是一个方法
    整个结构弄好了 方法效率不对以后可以随便改
      

  10.   

    用String类型的构造方法new String(chars)就可以转换成String类型了