位元組陣列轉化為十六進位制字串時 &0xff
阿新 • • 發佈:2018-11-22
我是資源的搬運工~~~
關於這個位元組陣列轉化為十六進位制字串時 &0xff,看到很多次了,這裡整理一下網上的資料,記錄一下:
/** * 位元組陣列轉換成字串HEX表示 * * @param data 位元組陣列 * @return 位元組陣列的HEX字串表示 */ public static String bytes2HexString(byte[] data) { if (data == null) { throw new NullPointerException(); } StringBuilder buffer = new StringBuilder(); for (byte b : data) { String hex = Integer.toHexString(b & 0xff);//為啥呢1 ?? if (hex.length() == 1) { buffer.append('0');//為啥呢2 ?? } buffer.append(hex); } return buffer.toString().toUpperCase(); }
為啥呢1 :保持二進位制補碼的一致性,因為計算機儲存機制是:正數儲存的二進位制原碼,負數儲存的是二進位制的補碼
為啥呢2:如果是十六進位制的0f,預設只顯示f,此時要補上0
注:當系統檢測到byte可能會轉化成int或者說byte與int型別進行運算的時候,就會將byte的記憶體空間高位補1(也就是按符號位補位)擴充到32位,再參與運算。