java 16進制與字符串直接相互轉換
CreationTime--2018年7月12日09點39分
Author:Marydon
1.16進制轉換成字符串
/**
* 16進制直接轉換成為字符串
* @explain
* @param hexStr 16進制字符串
* @return String (字符集:UTF-8)
*/
public static String fromHexString(String hexString) throws Exception {
// 用於接收轉換結果
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, "UTF-8");
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)); }
4.說明
要想將特殊轉義符當作字符串來正常解析,需要自己再手動進行轉義,比如:
// 輸出\\ String str = "\\\\"; String hexStr = toHexString(str); System.out.println(hexStr); System.out.println(fromHexString(hexStr)); // 輸出\n str = "\\n"; hexStr = toHexString(str); System.out.println(hexStr); System.out.println(fromHexString(hexStr));
toHexString()方法中,調用的contains(param)方法,不需要轉義,而是將param當作純字符串來解析,所以能校驗通過!
