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)。即byte用十六進制表示隻占2位。
同理,相反的轉換也是将兩個16進制字元轉換成一個byte,原理同上。
根據以上原理,我們就可以将byte[] 數組轉換為16進制字元串了,當然也可以将16進制字元串轉換為byte[]數組了。
下面是實作byte[]數組和十六進制字元串之間轉化的工具類:
[java] view
plaincopy
package text.com;
public class bytesutil {
/**
* convert byte[] to hex string. 把位元組數組轉化為字元串
* 這裡我們可以将byte轉換成int,然後利用integer.tohexstring(int)來轉換成16進制字元串。
* @param src byte[] data
* @return hex string
*/
public static string bytestohexstring(byte[] src){
stringbuilder stringbuilder = new stringbuilder("");
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xff;
string hv = integer.tohexstring(v);
if (hv.length() < 2) {
stringbuilder.append(0);
}
stringbuilder.append(hv+" ");
return stringbuilder.tostring();
}
/**
* convert hex string to byte[] 把為字元串轉化為位元組數組
* @param hexstring the hex string
* @return byte[]
*/
public static byte[] hexstringtobytes(string hexstring) {
if (hexstring == null || hexstring.equals("")) {
hexstring = hexstring.touppercase();
int length = hexstring.length() / 2;
char[] hexchars = hexstring.tochararray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (chartobyte(hexchars[pos]) << 4 | chartobyte(hexchars[pos + 1]));
return d;
* convert char to byte
* @param c char
* @return byte
private static byte chartobyte(char c) {
return (byte) "0123456789abcdef".indexof(c);
}
下面是測試程式:
public class test {
public static void main(string[] args) {
byte b1 = 11;
byte b2 = 21;
byte b3 = 31;
byte b4 = 41;
byte b5 = 51;
byte b6 = 61;
byte b7 = 71;
byte b8 = 81;
byte[] bytes = new byte[] { b1, b2, b3, b4, b5, b6, b7, b8 };
string hexstring = "0b 15 1f 29 33 3d 47 51";
string str = bytesutil.bytestohexstring(bytes);
system.out.println("str--->" + str);
byte[] hexstringtobytes = bytesutil.hexstringtobytes(hexstring);
for (int i = 0; i < hexstringtobytes.length; i++) {
system.out.println("hexstringtobytes---->" + hexstringtobytes[i]);
}
}
控制台輸出:
str--->0b 15 1f 29 33 3d 47 51
hexstringtobytes---->11
hexstringtobytes---->21
hexstringtobytes---->31
hexstringtobytes---->41
hexstringtobytes---->51
hexstringtobytes---->61
hexstringtobytes---->71
hexstringtobytes---->81