天天看點

Javabyte[]數組和十六進制String之間的轉換

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