标注的地方实在没看懂,为什么<2 要添加0,是什么原理? if (hv.length() < 2) {   
            stringBuilder.append(0);   
  }   

解决方案 »

  1.   

    能帮忙解答一下在什么情况下需要补0,是16进制最前面那个0还是什么情况!
    这种问题自己写个单元测试测一下就知道了,比如 Integer i = 15; Integer.toHexString(i) 结果就是 "f",这种情况在前面补个0 就是 "0f",
    Integer i = 16; Integer.toHexString(i) 结果就是 "10",这种情况就不需要补0了
      

  2.   

    一个char是8字节,而4个字节就可以表示一个十六进制,因此一个char转换成十六进制需要转换成两位十六进制,
    也就是:1111 1111 = F F,所以如果只有一位,就需要将高位的F补0。
      

  3.   

    倒不如直接 String hv = String.format("%02X", v);
      

  4.   

    不要这样做,这样做性能较差,参考:
    public class Hex {    private static final char[] HEX = "0123456789abcdef".toCharArray();    private Hex() {
        }    public static void main(String[] args) {        byte[] bytes = { 0 , 1 , 2 , (byte)0x7f };        System.out.println( toHex( bytes ) );
        }    public static String toHex(byte[] bytes) {        if ( bytes == null ) {
                return null;
            }        char[] chs = new char[bytes.length << 1];        for ( int i = 0 , k = 0 ; i < bytes.length ; i++ ) {
                chs[k++] = HEX[(bytes[i] & 0xf0) >>> 4];
                chs[k++] = HEX[(bytes[i] & 0x0f)];
            }        return new String(chs);
        }
    }
      

  5.   

    错了吧,一个char是8个位,4位就可以表示16进制
      

  6.   

    错了吧,一个char是8个位,4位就可以表示16进制
    所以一个char需要两个十六进制,那里错了?