java 二進制和十六進制的互轉

前言

前段時間裏項目裏用到了2進制和16進制的轉換,最開始一直用的包裝類型自帶的轉換方法,類似這樣的 十六進制轉成十進制

Integer.valueOf("FFFF",16).toString();

這樣的方法在十六進制很短的情況下沒問題,但是在十六進制很長的時候就會出錯,比如:

Integer.valueOf("FFFFFFFF",16).toString();

會直接拋 Java.lang.NumberFormatException: For input string: “FFFFFFFF” 異常,因爲通過這樣的轉換,在把字符串轉成整形的時候,長度太長了,超過的整形的最大值, 

所以不能直接使用這樣的方法轉換,我在網上查了一些資料,找到了轉換的方法,在這裏分享一下,希望可以幫到遇到類似問題的小夥伴。。。老規矩直接上代碼。。。

private static String hexStr =  "0123456789ABCDEF"; 
private static String[] binaryArray =   
        {"0000","0001","0010","0011",  
        "0100","0101","0110","0111",  
        "1000","1001","1010","1011",  
        "1100","1101","1110","1111"};  

 /** 
     *  
     * @param str 
     * @return 二進制數組轉換爲二進制字符串   2-2
     */  
    public static String bytes2BinStr(byte[] bArray){  

        String outStr = "";  
        int pos = 0;  
        for(byte b:bArray){  
            //高四位  
            pos = (b&0xF0)>>4;  
            outStr+=binaryArray[pos];  
            //低四位  
            pos=b&0x0F;  
            outStr+=binaryArray[pos];  
        }  
        return outStr;  
    }  

      /** 
     *  
     * @param bytes 
     * @return 將二進制數組轉換爲十六進制字符串  2-16
     */  
    public static String bin2HexStr(byte[] bytes){  

        String result = "";  
        String hex = "";  
        for(int i=0;i<bytes.length;i++){  
            //字節高4位  
            hex = String.valueOf(hexStr.charAt((bytes[i]&0xF0)>>4));  
            //字節低4位  
            hex += String.valueOf(hexStr.charAt(bytes[i]&0x0F));  
            result +=hex;  //+" "
        }  
        return result;  
    } 

    /** 
     *  
     * @param hexString 
     * @return 將十六進制轉換爲二進制字節數組   16-2
     */  
    public static byte[] hexStr2BinArr(String hexString){  
        //hexString的長度對2取整,作爲bytes的長度  
        int len = hexString.length()/2;  
        byte[] bytes = new byte[len];  
        byte high = 0;//字節高四位  
        byte low = 0;//字節低四位  
        for(int i=0;i<len;i++){  
             //右移四位得到高位  
             high = (byte)((hexStr.indexOf(hexString.charAt(2*i)))<<4);  
             low = (byte)hexStr.indexOf(hexString.charAt(2*i+1));  
             bytes[i] = (byte) (high|low);//高地位做或運算  
        }  
        return bytes;  
    }

    /** 
     *  
     * @param hexString 
     * @return 將十六進制轉換爲二進制字符串   16-2 
     */  
    public static String hexStr2BinStr(String hexString){
        return bytes2BinStr(hexStr2BinArr(hexString));
    }

這些都是比較實用的,經過測試沒有問題。可以直接拿來使用。。 大概就是這些,如果有更好的方法,希望大家指正。。

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