一、什么是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--9
21 ch = (char) ('0'+h);
22 }
23
24 if(l>9){
25 cl = (char) ('A'+(l-10));
26 }else{ //0--9
27 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 }
相关知识: