1. 程式人生 > >android開發中遇到的進位制轉換,16進位制資料流轉和字串的相互轉換

android開發中遇到的進位制轉換,16進位制資料流轉和字串的相互轉換

最近開發的程式是利用無線網路,收發資料,其中,接收和傳送的格式是16進位制位元組陣列 byte[],而顯示到介面中則不可能把一堆的位元組流顯示出來。因此,需要進行一下轉換。 

直接說轉換的演算法吧

       一、16進位制位元組陣列轉換成字串

核心的語句就一句getString += String.format("%02X", data[i]);這句話的意思是data[i]以16進位制輸出,寬度為2 ,如果不足2則在左側補0;

public String bytes2String(byte[] data){
String getString = "";

for(int i = 0; i < data.length; i++){

getString += String.format("%02X", data[i]);

}

return getString;

}

二、String 轉換成16進位制byte[]

 方法和上面差不多,但是多了一些步驟,1、把字串變成全部變為大寫,2、用char[ ]複製String的內容,3,zhuanhua

public byte[] StringtoBytes(String data){

if(data == null || data.equals("")){

return null;

}

data = data.toUpperCase();

char[] datachar = data.tochararray();

byte[] getbytes = new byte[data.length / 2];

for( int i = 0; i < data.length/2 ; i++){
int pos = i * 2;

getbytes[i] = (byte) (charToByte(data[pos]) << 4 | charToByte(data[pos + 1]));

}

return getbytes;

}

private static byte charToByte(char c) {
return (byte) "0123456789ABCDEF".indexOf(c);
}

原理:

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[]陣列了。