16進制字符串與byte數組互轉

16進制字符串與byte數組互轉

public class Test1 {

    private static String hexSrc = "01 DA 20 C9 38 57";
    private static byte[] bytes = { 0x01, (byte)0xDA, 0x20, (byte)0xC9, 0x38, 0x57 };

    public static void main(String[] args) {
        System.err.println(hexSrc.trim().replaceAll("\\s*", ""));
        System.err.println(bytes2HexString(hexStringToBytes(hexSrc)));
                            //hexStringToBytes(hexSrc)方法轉換出來的效果和bytes的格式一樣
        System.err.println(bytesToHexString(bytes));

    }

    /**
     * 將byte數組轉化爲16進制字符串
     * string.這裏我們可以將byte轉換成int,然後利用Integer.toHexString(int)來轉換成16進制字符串。
     */
    public static String bytesToHexString(byte[] bs) {
        StringBuffer sb = new StringBuffer();
        if (bs == null) {
            return null;
        }

        for (int i = 0; i < bs.length; i++) {
            // Integer.toHexString(int)來轉換成16進制字符串
            String hex = Integer.toHexString(bs[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            sb.append(hex.toUpperCase()); // 將小寫字母轉化爲大寫
        }

        return sb.toString();
    }

    /**
     * 將16進制字符串轉換爲byte數組
     * 
     * @param 需要轉換的16進制字符串
     */
    public static byte[] hexStringToBytes(String hexString) {
        if (hexString == null || hexString.equals("")) {
            return null;
        }
        hexString = hexString.trim().replaceAll("\\s*", ""); // 去除字符串中的空格

        String hexFormat = "0123456789ABCDEF";

        hexString = hexString.toUpperCase();
        int length = hexString.length() / 2;
        char[] hexChars = hexString.toCharArray();
        byte[] d = new byte[length];
        for (int i = 0; i < length; i++) {
            int pos = i * 2;
            d[i] = (byte) (hexFormat.indexOf(hexChars[pos]) << 4 | hexFormat
                    .indexOf(hexChars[pos + 1]));
        }
        return d;
    }

    /**
     * 將byte數組轉化爲16進制字符串
     */
    public static String bytes2HexString(byte[] bytes) {
        int len = bytes.length;
        StringBuffer sb = new StringBuffer();
        char temp;
        for (int i = 0; i < len; i++) {
            temp = (char) ((bytes[i] >> 4) & 0x0F);
            sb.append((char) (temp > 9 ? (temp + 'A' - 10) : temp + '0'));
            temp = (char) (bytes[i] & 0x0F);
            sb.append((char) (temp > 9 ? (temp + 'A' - 10) : temp + '0'));
        }
        return sb.toString();
    }

}

打印效果

這裏寫圖片描述

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