Java中byte用二進位表示佔用8位,而我們知道16進位的每個字元需要用4位二進位位來表示(23
+ 22
+ 21
+ 20
= 15),所以我們就可以把每個byte轉換成兩個相應的16進位字元,即把byte的高4位和低4位分別轉換成相應的16進位字元H和L,並組合起來得到byte轉換到16進位字串的結果new String(H) + new String(L)。
同理,相反的轉換也是將兩個16進位字元轉換成一個byte,原理同上。
根據以上原理,我們就可以將byte[] 數群組轉換為16進位字串了,當然也可以將16進位字串轉換為byte[]數組了。
/**<br /> * Convert byte[] to hex string.這裡我們可以將byte轉換成int,然後利用Integer.toHexString(int)來轉換成16進位字串。<br /> * @param src byte[] data<br /> * @return hex string<br /> */<br /> public static String bytesToHexString(byte[] src){<br /> StringBuilder stringBuilder = new StringBuilder("");<br /> if (src == null || src.length <= 0) {<br /> return null;<br /> }<br /> for (int i = 0; i < src.length; i++) {<br /> int v = src[i] & 0xFF;<br /> String hv = Integer.toHexString(v);<br /> if (hv.length() < 2) {<br /> stringBuilder.append(0);<br /> }<br /> stringBuilder.append(hv);<br /> }<br /> return stringBuilder.toString();<br /> }<br /> /**<br /> * Convert hex string to byte[]<br /> * @param hexString the hex string<br /> * @return byte[]<br /> */<br /> public static byte[] hexStringToBytes(String hexString) {<br /> if (hexString == null || hexString.equals("")) {<br /> return null;<br /> }<br /> hexString = hexString.toUpperCase();<br /> int length = hexString.length() / 2;<br /> char[] hexChars = hexString.toCharArray();<br /> byte[] d = new byte[length];<br /> for (int i = 0; i < length; i++) {<br /> int pos = i * 2;<br /> d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));<br /> }<br /> return d;<br /> }<br /> /**<br /> * Convert char to byte<br /> * @param c char<br /> * @return byte<br /> */<br /> private byte charToByte(char c) {<br /> return (byte) "0123456789ABCDEF".indexOf(c);<br /> }
備忘: 關於代碼中第12行 int v = src[i] & 0xFF; 如有疑問,可以查看:java中byte轉換int時為何與0xff進行與運算