码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-02-29 23:24:46      阅读:331      评论:0      收藏:0      [点我收藏+]

标签:字符串   二进制   十六进制   return   public   

    很多时候我们需要将字节数组转化为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进制字符串

标签:字符串   二进制   十六进制   return   public   

原文地址:http://jaydenwang.blog.51cto.com/6033165/1746161

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!