1. 程式人生 > >位元組陣列轉化為十六進位制字串時 &0xff

位元組陣列轉化為十六進位制字串時 &0xff

我是資源的搬運工~~~

關於這個位元組陣列轉化為十六進位制字串時 &0xff,看到很多次了,這裡整理一下網上的資料,記錄一下:

byte 為什麼要&0xff

byte 為什麼要 &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位,再參與運算。