1. 程式人生 > >java 二進位制資料與16進位制字串相互轉化

java 二進位制資料與16進位制字串相互轉化

        二進位制資料一般輸入的格式是0x45, 0x3a, 0xc3, 這種資料格式看起來是16進位制的字串,但是實際上在儲存的時候每個都對應一個位元組,比如0x45的二進位制位元組就是0100 0101,對應的16進位制字串就是0x45。實際程式設計過程中,經常遇到這兩種格式的相互轉化,在此記錄一下程式碼。

         二進位制資料轉化為16進位制字串(中間加的‘:’還有‘;’是為了檢視下標,也可以自行去掉):

    public static String bytesToHexString(byte[] src){
        StringBuilder stringBuilder = new StringBuilder();
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);

            stringBuilder.append(i + ":");

            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv + ";");
        }
        return stringBuilder.toString();
    }
         16進位制字串轉化為二進位制資料:
public static byte[] hexStringToByte(String hex) {
        int len = (hex.length() / 2);
        byte[] result = new byte[len];
        char[] achar = hex.toCharArray();
        for (int i = 0; i < len; i++) {
            int pos = i * 2;
            result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
        }
        return result;
    }

    private static byte toByte(char c) {
        byte b = (byte) "0123456789abcdef".indexOf(c);
        return b;
    }