Java 十六進位制(Hex)與byte陣列之間的轉換
阿新 • • 發佈:2019-01-29
一、十六進位制(Hex)與位元組(byte)的概念
十六進位制(Hex):計算機中資料的一種表示方法,它由0-9,A-F組成,字母不區分大小寫。與10進位制的對應關係是:0-9對應0-9;A-F對應10-15。
位元組(byte): java中一個byte為8個二進位制位。
轉換原理:
每個二進位制位有兩種狀態,分別為0,1
因此,兩個二進位制位有4種狀態,分別為:00,01,10,11
三個二進位制位有8種狀態,分別為000,001,010,011,100,101,110,111
四個二進位制位有十六種狀態,0000,0001......1110,1111. 即十六進位制
一個十六進位制數(Hex),正好為4個二進位制位。一個位元組(byte)為8個二進位制位。
因此,我們可以將一個byte用兩個Hex表示,同理,我們也可以將兩個Hex轉換為一個byte。
二、Java中Hex與byte的相互轉換
在java中,很多地方經常需要進行byte與Hex之間的轉換,比如:某些加密的過程(MD5),通訊的過程(TCP)。
1.byte轉Hex
很多時候,我們需要轉換的是一個byte陣列,一個一個byte呼叫上面的方法顯然太麻煩。/** * 位元組轉十六進位制 * @param b 需要進行轉換的byte位元組 * @return 轉換後的Hex字串 */ public static String byteToHex(byte b){ String hex = Integer.toHexString(b & 0xFF); if(hex.length() < 2){ hex = "0" + hex; } return hex; }
/** * 位元組陣列轉16進位制 * @param bytes 需要轉換的byte陣列 * @return 轉換後的Hex字串 */ public static String bytesToHex(byte[] bytes) { StringBuffer sb = new StringBuffer(); for(int i = 0; i < bytes.length; i++) { String hex = Integer.toHexString(bytes[i] & 0xFF); if(hex.length() < 2){ sb.append(0); } sb.append(hex); } return sb.toString(); }
2.Hex轉byte
需注意的是,Hex的字串必須為十六進位制的字元,否則會丟擲異常。Hex的範圍為0x00到0xFF。
/**
* Hex字串轉byte
* @param inHex 待轉換的Hex字串
* @return 轉換後的byte
*/
public static byte hexToByte(String inHex){
return (byte)Integer.parseInt(inHex,16);
}
如果Hex超過0xFF,顯然轉換後結果不是一個byte,而是一個byte陣列
/**
* hex字串轉byte陣列
* @param inHex 待轉換的Hex字串
* @return 轉換後的byte陣列結果
*/
public static byte[] hexToByteArray(String inHex){
int hexlen = inHex.length();
byte[] result;
if (hexlen % 2 == 1){
//奇數
hexlen++;
result = new byte[(hexlen/2)];
inHex="0"+inHex;
}else {
//偶數
result = new byte[(hexlen/2)];
}
int j=0;
for (int i = 0; i < hexlen; i+=2){
result[j]=hexToByte(inHex.substring(i,i+2));
j++;
}
return result;
}
都是靜態方法,複製貼上直接用就可以了。喜歡的同學請點贊!