1-Hex编码
发布时间:2023-02-16 13:47:44 所属栏目:Java 来源:互联网
导读:编码原理 Hex编码就是把一个8位的字节数据用两个十六进制数展示出来,编码时,将8位二进制码重新分组成两个4位的字节,其中一个字节的低4位是原字节的高四位,另一个字节的低4位是原数据的低4位,高4位都补0,然后输出这两个字节对应十六进制数字作为编码。H
} Apache Commons Codec实现源码分析 Apache Commons Codec实现Hex编码的步骤是直接创建一个两倍源数据长度的字符数组,然后分别将源数据的每个字节转换成两个字节放到目标字节数组中,Apache Commons Codec支持设置的要转换为大写还是小写。 private static final char[] DIGITS_LOWER = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; private static final char[] DIGITS_UPPER = {'0','A','B','C','D','E','F'}; public static char[] encodeHex(final byte[] data) { return encodeHex(data,true); } public static char[] encodeHex(final byte[] data,final boolean toLowerCase) { return encodeHex(data,toLowerCase ? DIGITS_LOWER : DIGITS_UPPER); } protected static char[] encodeHex(final byte[] data,final char[] toDigits) { final int l = data.length; final char[] out = new char[l << 1]; // two characters form the hex value. for (int i = 0,j = 0; i < l; i++) { out[j++] = toDigits[(0xF0 & data[i]) >>> 4]; out[j++] = toDigits[0x0F & data[i]]; } return out; } Apache Commons Codec实现Hex解码的步骤是首先创建一个原字符串一半长度的字节数组,然后依次将两个连续的十六进制数转换为一个字节数据,转换时使用了JDK的Character.digit方法。 public static byte[] decodeHex(final char[] data) throws DecoderException { final int len = data.length; if ((len & 0x01) != 0) { throw new DecoderException("Odd number of characters."); } final byte[] out = new byte[len >> 1]; // two characters form the hex value. for (int i = 0,j = 0; j < len; i++) { int f = toDigit(data[j],j) << 4; j++; f = f | toDigit(data[j],j); j++; out[i] = (byte) (f & 0xFF); } return out; } protected static int toDigit(final char ch,final int index) throws DecoderException { final int digit = Character.digit(ch,16); if (digit == -1) { throw new DecoderException("" + "Illegal hexadecimal character " + ch + " at index " + index); } return digit; } (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |