public static final String toHex(byte[] data, int off, int length) {   
    // double size, two bytes (hex range) for one byte   
    StringBuffer buf = new StringBuffer(data.length * 2);   
    for (int i = off; i < length; i++) {   
        // don't forget the second hex digit   
        if (((int) data[i] & 0xff) < 0x10) {   
            buf.append("0");   
        }   
        buf.append(Long.toString((int) data[i] & 0xff, 16));   
       /* if (i < data.length - 1) {   
            buf.append(" ");   
        }   */
    }   
    return buf.toString().toUpperCase();   
}
请问以上方法我把byte数组转成16进制的形式,使用该方法时候如果遇到11字节的数据就会丢失。。请问是什么原因??

解决方案 »

  1.   

    public class Test2 {
        
        private final static char[] HEX = "0123456789abcdef".toCharArray();
        
        public static void main(String[] args) {
            byte[] bys = { 0x7e, (byte)0x8f, 0x7c, (byte)0xa9 };
            System.out.println(toHex(bys, 0, 3));
        }
        
        public static String toHex(byte[] bys, int start, int length) {
            if(bys == null || bys.length == 0) {
                throw new IllegalArgumentException("byte array is empty");
            }
            if(start < 0) {
                throw new IllegalArgumentException("start is array index that greater than or equal 0");
            }
            if(length < 1) {
                throw new IllegalArgumentException("length must be greater than 0");
            }
            if(start + length > bys.length) {
                throw new IllegalArgumentException("array max length is " + bys.length);
            }
            char[] chs = new char[length * 2];
            for(int i = start, k = start + length, n = 0; i < k; i++) {
                chs[n++] = HEX[bys[i] >> 4 & 0xf];
                chs[n++] = HEX[bys[i] & 0xf];
            }
            return new String(chs);
        }
    }