在java中怎么将二进制与十六进制进行转换?实例代码展示

BSO 2020-09-11 10:21:27 java常见问答 8446

在现代化进程不断加快的今时今日,越来越多的人开始投入到新兴技术的学习中来。其中java就因其强大而广受青睐。今天就来为大家介绍一些java基础知识,在java中怎么将二进制与十六进制进行转换?并且通过实际的代码来展示。

首先我们需要了解的是二进制与十六进制相互转换的主要思想有下面两点:

⑴二进制字节转十六进制时,将字节高位与0xF0做"&"操作,然后再左移4位,得到字节高位的十六进制A;将字节低位与0x0F做"&"操作,得到低位的十六进制B,将两个十六进制数拼装到一块AB就是该字节的十六进制表示。

⑵十六进制转二进制字节时,将十六进制字符对应的十进制数字右移动4位,得到字节高位A;将字节低位的十六进制字符对应的十进制数字B与A做"|"运算,即可得到十六进制的二进制字节表示。

代码展示如下:

public class Test01
{
    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"
    };
    public static void main(String[] args)
    {
        String str = "二进制与十六进制互转测试";
        System.out.println("源字符串:\n" + str);
        String hexString = BinaryToHexString(str.getBytes());
        System.out.println("转换为十六进制:\n" + hexString);
        System.out.println("转换为二进制:\n" + bytes2BinaryStr(str.getBytes()));
        byte[] bArray = HexStringToBinary(hexString);
        System.out.println("将str的十六进制文件转换为二进制再转为String:\n" + new String(bArray));
    }
    /** 
     *  
     * @param str 
     * @return 转换为二进制字符串 
     */
    public static String bytes2BinaryStr(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 将二进制转换为十六进制字符输出 
     */
    public static String BinaryToHexString(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 将十六进制转换为字节数组 
     */
    public static byte[] HexStringToBinary(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;
    }
}

运行后的输出结果如下。

源字符串:

二进制与十六进制互转测试

转换为十六进制:

E 4BA 8CE 8BF 9BE 588B 6E 4B88EE 58D 81E 585ADE 8BF 9BE 588B 6E 4BA 92E 8BDACE 6B 58BE8AF 95

转换为二进制:

11100100 10111010 10001100 11101000 10111111 10011011 11100101 10001000 10110110 11100100 10111000 10001110 11100101 10001101 10000001 11100101 10000101 10101101 11101000 10111111 10011011 11100101 10001000 10110110 11100100 10111010 10010010 11101000 10111101 10101100 11100110 10110101 10001011 11101000 10101111 10010101

以上就是关于在java中二进制与十六进制进行转换的主要内容,并且通过实际的代码来为大家讲解。想要了解更多java经典例子,敬请关注奇Q工具网。

推荐阅读:

二进制中1的个数(思路和实现)

java自动类型转换是什么意思?强制的又是什么意思?

java对象类型转换,强制对象类型转换介绍