加入收藏 | 设为首页 | 会员中心 | 我要投稿 甘南站长网 (https://www.0941zz.com/)- 科技、行业物联网、开发、云计算、云管理!
当前位置: 首页 > 编程开发 > Java > 正文

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;
  }
  

(编辑:甘南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读