1、什麼是Hex算法
將每個字節表示的十六進制表示的內容,用字符串來顯示。數組
2、做用app
將不可見的,複雜的字節數組數據,轉換爲可顯示的字符串數據ui
相似於Base64編碼算法編碼
區別:Base64將三個字節轉換爲四個字符,Hex將三個字節轉換爲六個字節字符串
3、應用場景二進制
在XML,JSON等文本中包含不可見數據(二進制數據)時使用im
4、使用數據
一、將字節數組轉換爲字符串static
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 }
二、將字符串轉換爲字節數組
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 }