本文共 2612 字,大约阅读时间需要 8 分钟。
一、什么是Hex
将每一个字节表示的十六进制表示的内容,用字符串来显示。
二、作用
将不可见的,复杂的字节数组数据,转换为可显示的字符串数据
类似于Base64编码算法
区别:Base64将三个字节转换为四个字符,Hex将三个字节转换为六个字节
三、应用场景
在XML,JSON等文本中包含不可见数据(二进制数据)时使用
四、使用
1、将字节数组转换为字符串
1 /** 2 * 将字节数组转换为字符串 3 * 一个字节会形成两个字符,最终长度是原始数据的2倍 4 * @param data 5 * @return 6 */ 7 public static String toHex(byte[] data){ 8 String ret = null; 9 10 //TODO 将字节数组转换为字符串11 if (data != null && data.length>0) {12 StringBuilder sb = new StringBuilder();13 for (byte b: data){14 //分别获取高四位,低四位的内容,将两个数值,转为字符15 int h = (b>>4)&0x0f;16 int l = b&0x0f;17 char ch ,cl;18 if( h > 9 ){19 ch = (char) ('A'+(h-10));20 }else{ //0--921 ch = (char) ('0'+h);22 }23 24 if(l>9){25 cl = (char) ('A'+(l-10));26 }else{ //0--927 cl = (char) ('0'+l);28 }29 30 31 sb.append(ch).append(cl);32 }33 ret = sb.toString();34 }35 36 return ret;37 }
2、将字符串转换为字节数组
1 public static byte[] fromHex(String str) { 2 byte[] ret = null; 3 4 //TODO 将Hex编码的字符串,还原为 原始的字节数组 5 if (str != null) { 6 int len = str.length(); 7 if (len > 0 && len % 2 == 0) { 8 char[] chs = str.toCharArray(); 9 ret = new byte[len / 2];10 for (int i = 0, j = 0; i < len; i += 2, j++) {11 char ch = chs[i];12 char cl = chs[i + 1];13 14 int ih = 0, il = 0, v = 0;15 if (ch >= 'A' && ch <= 'F') {16 ih = 10 + (ch - 'A');17 } else if (ch >= 'a' && ch <= 'f') {18 ih = 10 + (ch - 'a');19 } else if (ch >= '0' && ch <= '9') {20 ih = ch - '0';21 }22 23 if (cl >= 'A' && cl <= 'F') {24 il = 10 + (cl - 'A');25 } else if (cl >= 'a' && cl <= 'f') {26 il = 10 + (cl - 'a');27 } else if (cl >= '0' && cl <= '9') {28 il = cl - '0';29 }30 31 v = ((ih & 0x0f) << 4) | (il & 0x0f);32 //赋值33 ret[j] = (byte) v;34 }35 }36 }37 return ret;38 }
相关知识:
转载地址:http://rmxto.baihongyu.com/