浅谈Hex编码算法
一、什么是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 }
相关知识:
作者:听着music睡
出处:http://www.cnblogs.com/xqxacm/
Android交流群:38197636
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。