標籤:問題: 進位 from uil ref 不能 index end str 字串
java 16進位與字串直接相互轉換CreationTime--2018年7月12日09點39分Author:Marydon1.16進位轉換成字串
/** * 16進位直接轉換成為字串 * @explain * @param hexStr 16進位字串 * @return String */public static String fromHexString(String hexString) { // 用於接收轉換結果 String result = ""; // 轉大寫 hexString = hexString.toUpperCase(); // 16進位字元 String hexDigital = "0123456789ABCDEF"; // 將16進位字串轉換成char數組 char[] hexs = hexString.toCharArray(); // 能被16整除,肯定可以被2整除 byte[] bytes = new byte[hexString.length() / 2]; int n; for (int i = 0; i < bytes.length; i++) { n = hexDigital.indexOf(hexs[2 * i]) * 16 + hexDigital.indexOf(hexs[2 * i + 1]); bytes[i] = (byte) (n & 0xff); } // byte[]-->String result = new String(bytes); return result;}
2.字串轉換成大寫的16進位字串
/** * 字串轉換成為16進位字串(大寫) * @explain 因為java逸出字元串在java中有著特殊的意義, * 所以當字串中包含逸出字元串,並將其轉換成16進位後,16進位再轉成String時,會出問題: * java會將其當做逸出字元串所代表的含義解析出來 * @param str 字串(去除java逸出字元) * @return 16進位字串 * @throws Exception */public static String toHexString(String str) throws Exception { // 用於接收轉換結果 String hexString = ""; // 1.校正是否包含特殊字元內容 // java特殊轉義符 // String[] escapeArray = {"\b","\t","\n","\f","\r","\‘","\"","\\"}; String[] escapeArray = {"\b","\t","\n","\f","\r"}; // 用於校正參數是否包含特殊轉義符 boolean flag = false; // 迭代 for (String esacapeStr : escapeArray) { // 一真則真 if (str.contains(esacapeStr)) { flag = true; break;// 終止迴圈 } } // 包含特殊字元 if (flag) throw new Exception("參數字串不能包含逸出字元!"); // 16進位字元 char[] hexArray = {‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘}; StringBuilder sb = new StringBuilder(); // String-->byte[] byte[] bs = str.getBytes(); int bit; for (int i = 0; i < bs.length; i++) { bit = (bs[i] & 0x0f0) >> 4; sb.append(hexArray[bit]); bit = bs[i] & 0x0f; sb.append(hexArray[bit]); } hexString = sb.toString(); return hexString;}
3.測試
/** * * @explain * @param args * @throws Exception */public static void main(String[] args) throws Exception { // 其中,\‘\"\\ 實際字串代表:‘"\ String str = "張三&$李四((、,//\‘\"\\‘’“”+-*/!!~.。=——??;;"; String hexStr = toHexString(str); System.out.println(hexStr); System.out.println(fromHexString(hexStr));}
相關推薦:
- java byte數組與16進位間的相互轉換
- java byte數組與String互轉
java 16進位與字串直接相互轉換