Java中byte[]与十六进制之间的转化

Javabyte是占 8位二进制,十六进制的数是用 4位二进制来表示的。因此当 byte转十六进制时,将 byte8位二进制,分为高 4位和低 4位并分别转化为相应的十六进制,再合到一起即可。当十六进制转 byte时,将两个十六进制数转化为相应的 byte即可。


byte[]与十六进制字符串之间的转化代码如下:

public class BytesAndHex {

    /**
     * byte[]转十六进制
     * @param bytes
     * @return
     */
    public String bytesTohex(byte[] bytes) {
        StringBuilder hex = new StringBuilder();
        for (int i = 0; i < bytes.length; i++) {
            byte b = bytes[i];
            boolean flag = false;
            if (b < 0) flag = true;
            int absB = Math.abs(b);
            if (flag) absB = absB | 0x80;
            System.out.println(absB & 0xFF);
            String tmp = Integer.toHexString(absB & 0xFF);
            if (tmp.length() == 1) { //转化的十六进制不足两位,需要补0
                hex.append("0");
            }
            hex.append(tmp.toLowerCase());
        }
        return hex.toString();
    }

    /**
     * 十六进制转byte[]
     * @param hex
     * @return
     */
    public byte[] hexTobytes(String hex) {
        byte[] bytes = new byte[hex.length() / 2];
        for (int i = 0; i < hex.length(); i = i + 2) {
            String subStr = hex.substring(i, i + 2);
            boolean flag = false;
            int intH = Integer.parseInt(subStr, 16);
            if (intH > 127) flag = true;
            if (intH == 128) {
                intH = -128;
            } else if (flag) {
                intH = 0 - (intH & 0x7F);
            }
            byte b = (byte) intH;
            bytes[i / 2] = b;
        }
        return bytes;
    }
}


微信扫码关注公众号“程序员旅途”查看更多


猜你喜欢

转载自blog.csdn.net/leosblog/article/details/80295685
今日推荐