Java 將字節轉化爲16進制字符串

    很多時候我們需要將字節數組轉化爲16進制字符串來保存,例如做I/O字節流操作的時候,尤其在很多加密的場景中應用都比較廣泛。

     Java中byte用二進制表示佔用8位,而我們知道16進制的每個字符需要用4位二進制位來表示,所以我們就可以把每個byte轉換成兩個相應的16進制字符,即把byte的高4位和低4位分別轉換成相應的16進制字符H和L,並組合起來得到byte 轉換到16進制字符串的結果new String(H) + new String(L)。即byte用十六進制表示只佔2位。

    從上面可以看出來我們只需要分別取出高四位和低四位的二進制值,然後進行相應的換算。

    具體方案如下:
    

    /**
     * 0x0F 十六進制F 相當於值 十進制 15,二進制表現形式爲 0000 1111 二進制 1 & 任何數是原數 二進制 0 & 任何數是0
     * 
     * @param b
     * @return
     */
    public static String byteToHexString(Byte b) {
        final String HEX = "0123456789abcdef";
        StringBuilder sb = new StringBuilder();
        /**
         * 爲什麼要與0xof運算 因爲0xof的二進制是0000 1111,同時1&運算得出原數,0&運算得出0
         */
        // 1.取出字節b的高四位的數值並追加
        // 把高四位向右移四位,與 0x0f運算得出高四位的數值
        sb.append(HEX.charAt((b >> 4) & 0x0f));
        // 2.取出低四位的值並追加
        // 直接與 0x0f運算得出低四位的數值
        sb.append(HEX.charAt(b & 0x0f));
        return sb.toString();
    }


總結如下:

(1)一個byte 對應兩位十六進制位,而不是八位(32位二進制位);

(2)轉化爲十六進制之後,不足兩位的,高位要補零。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章