private static final int zero = java.lang.Math.abs(Byte.MIN_VALUE); private static final byte[][] hexList = new byte[zero+Byte.MAX_VALUE+1][]; static{ for(int i=0; i<Byte.MAX_VALUE*2+2; i++){ byte b = (byte) (Byte.MIN_VALUE+i); int num = (int)b; if (num < 0) { num = num + 256; } String sTemp = Integer.toHexString(num).toUpperCase(); if (sTemp.length() == 1) { sTemp = "0" + sTemp; } hexList[b+zero] = sTemp.getBytes(); } } /** * 将字节数组转化为一个16进制的字符串 * * @param b 原始字节数组 * * @return 16进制的字符串 */ public static String getHexString(byte[] b) { byte[] bytes = new byte[b.length*2]; for (int i = 0; i < b.length; i++) { int offset = b[i]+zero; bytes[i*2] = hexList[offset][0]; bytes[i*2+1] = hexList[offset][1]; } return new String(bytes); } public static byte[] hex2Bytes(String s) throws IOException { int i = s.length() / 2; byte result[] = new byte[i]; int j = 0; if (s.length() % 2 != 0){ throw new IOException("hexadecimal string with odd number of characters");
} for (int k = 0; k < i; k++) { char c = s.charAt(j++); int l = "0123456789abcdef0123456789ABCDEF".indexOf(c); if (l == -1){ throw new IOException("hexadecimal string contains non hex character");
} int i1 = (l & 0xf) << 4; c = s.charAt(j++); l = "0123456789abcdef0123456789ABCDEF".indexOf(c); i1 += l & 0xf; result[k] = (byte) i1; } return result; }