java 二进制和十六进制的互转

前言

前段时间里项目里用到了2进制和16进制的转换,最开始一直用的包装类型自带的转换方法,类似这样的 十六进制转成十进制

Integer.valueOf("FFFF",16).toString();

这样的方法在十六进制很短的情况下没问题,但是在十六进制很长的时候就会出错,比如:

Integer.valueOf("FFFFFFFF",16).toString();

会直接抛 Java.lang.NumberFormatException: For input string: “FFFFFFFF” 异常,因为通过这样的转换,在把字符串转成整形的时候,长度太长了,超过的整形的最大值, 

所以不能直接使用这样的方法转换,我在网上查了一些资料,找到了转换的方法,在这里分享一下,希望可以帮到遇到类似问题的小伙伴。。。老规矩直接上代码。。。

private static String hexStr =  "0123456789ABCDEF"; 
private static String[] binaryArray =   
        {"0000","0001","0010","0011",  
        "0100","0101","0110","0111",  
        "1000","1001","1010","1011",  
        "1100","1101","1110","1111"};  

 /** 
     *  
     * @param str 
     * @return 二进制数组转换为二进制字符串   2-2
     */  
    public static String bytes2BinStr(byte[] bArray){  

        String outStr = "";  
        int pos = 0;  
        for(byte b:bArray){  
            //高四位  
            pos = (b&0xF0)>>4;  
            outStr+=binaryArray[pos];  
            //低四位  
            pos=b&0x0F;  
            outStr+=binaryArray[pos];  
        }  
        return outStr;  
    }  

      /** 
     *  
     * @param bytes 
     * @return 将二进制数组转换为十六进制字符串  2-16
     */  
    public static String bin2HexStr(byte[] bytes){  

        String result = "";  
        String hex = "";  
        for(int i=0;i<bytes.length;i++){  
            //字节高4位  
            hex = String.valueOf(hexStr.charAt((bytes[i]&0xF0)>>4));  
            //字节低4位  
            hex += String.valueOf(hexStr.charAt(bytes[i]&0x0F));  
            result +=hex;  //+" "
        }  
        return result;  
    } 

    /** 
     *  
     * @param hexString 
     * @return 将十六进制转换为二进制字节数组   16-2
     */  
    public static byte[] hexStr2BinArr(String hexString){  
        //hexString的长度对2取整,作为bytes的长度  
        int len = hexString.length()/2;  
        byte[] bytes = new byte[len];  
        byte high = 0;//字节高四位  
        byte low = 0;//字节低四位  
        for(int i=0;i<len;i++){  
             //右移四位得到高位  
             high = (byte)((hexStr.indexOf(hexString.charAt(2*i)))<<4);  
             low = (byte)hexStr.indexOf(hexString.charAt(2*i+1));  
             bytes[i] = (byte) (high|low);//高地位做或运算  
        }  
        return bytes;  
    }

    /** 
     *  
     * @param hexString 
     * @return 将十六进制转换为二进制字符串   16-2 
     */  
    public static String hexStr2BinStr(String hexString){
        return bytes2BinStr(hexStr2BinArr(hexString));
    }

这些都是比较实用的,经过测试没有问题。可以直接拿来使用。。 大概就是这些,如果有更好的方法,希望大家指正。。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值