Java 将字节转化为16进制字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)转化为十六进制之后,不足两位的,高位要补零。


本文出自 “王威” 博客,请务必保留此出处http://jaydenwang.blog.51cto.com/6033165/1746161

以上是关于Java 将字节转化为16进制字符串的主要内容,如果未能解决你的问题,请参考以下文章

16进制字符串如何转化16进制数值

怎么将4字节16进制转化成浮点数

在labview中如何将16进制字符串数组转化为十进制数值数组?

怎么将4字节16进制转化成浮点数

如何将数组转化为字符串,编程怎么实现呢

JAVA里16进制和字节数组互转