Java基础之进制转换:十六进制、byte数组、十进制

  • 十六进制(Hex) 、 字节(Byte)、比特(bit)

    十六进制(Hex):计算机中数据的一种表示方法,它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15。
    官方语言以0x开始的数据表示16进制。0x01 意思是0 * 16^1 + 1 * 16^0 = 1。

    字节(Byte): 数据存储的基本单位。

    比特(bit): 计算机语言中表示数据信息的最小单位:0或1

  • 换算关系:

    1字节 = 8比特,即1个字节数据在计算机中可表示的范围在00000000~11111111之间。

    众所周知,在计算机语言中,一个二进制bit位要么是0,要么是1。所以,一个bit位最多能表示2种状态(2^1),即01

    那么2个bit位呢? 00,01,10,11 一共可以表示4种状态(2^2)。

    3个bit位可以表示:001,001,010,011,100,101,110,111 一共8种状态(2^3);

    以此类推,当我们有4个bit位时,最高可以表示出16种状态。

    然后就引申出了16进制(Hex):逢16进1

    所以,当我们想在计算机语言中表达出一个16进制数字时,得需要4个bit位。

    而1个Byte字节需要8个bit位,由此可见 byte和hex的换算关系:

    我们可以将一个Byte用两个Hex表示,同理,也可以将两个Hex转换为一个Byte

    基于这个原理,在Java中可以进行一些换算。

    单个byte和hex的转换:

        /**
         * 十六进制字符串 转 byte
         */
        public static byte hexToByte(String inHex) {
            return (byte) Integer.parseInt(inHex, 16);
        }
    
        /**
         * byte 转 十六进制
         */
        public static String byteToHex(byte b) {
            String hex = Integer.toHexString(b & 0xFF);
            if (hex.length() < 2) {
                hex = "0" + hex;
            }
            return hex;
        }
        
    
  • 而更多的应用场景时byte数组:

        /**
         * 十六进制 转 bytes数组
         */
        public static byte[] hexStringToBytes(String hexString) {
            if (hexString == null || hexString.equals("")) {
                return null;
            }
            hexString = hexString.toUpperCase().replace(" ", "");
            int length = hexString.length() / 2;
            char[] hexChars = hexString.toCharArray();
            byte[] d = new byte[length];
            for (int i = 0; i < length; i++) {
                int pos = i * 2;
                d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
            }
            return d;
        }
        
        /**
         * byte数组 转 十六进制
         */
        public static String bytesToHex(byte[] bytes) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < bytes.length; i++) {
                String hex = Integer.toHexString(bytes[i] & 0xFF);
                if (hex.length() < 2) {
                    sb.append(0);
                }
                sb.append(hex);
            }
            return sb.toString();
        }
    
  • 十进制和十六进制的转换就简单多了,调用系统api就行:

        /**
         * 十进制 转 十六进制
         */
        public static String encodeHEX(Integer numb) {
            return Integer.toHexString(numb);
        }
    
        /**
         * 十六进制 转 十进制
         */
        public static int hexToInt(String hex) {
            return Integer.parseInt(hex, 16);
        }
    

参考博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值