字节数组转化为十六进制字符串时 &0xff

本文详细解析了字节数组转换为十六进制字符串的过程中,为何需要使用&0xff操作来保持二进制补码一致性,以及如何处理十六进制数值的前导零问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我是资源的搬运工~~~

关于这个字节数组转化为十六进制字符串时 &0xff,看到很多次了,这里整理一下网上的资料,记录一下:

byte 为什么要&0xff

byte 为什么要 &0xff

 /**
     * 字节数组转换成字符串HEX表示
     *
     * @param data 字节数组
     * @return 字节数组的HEX字符串表示
     */
    public static String bytes2HexString(byte[] data) {
        if (data == null) {
            throw new NullPointerException();
        }

        StringBuilder buffer = new StringBuilder();
        for (byte b : data) {
            String hex = Integer.toHexString(b & 0xff);//为啥呢1 ??
            if (hex.length() == 1) {
                buffer.append('0');//为啥呢2 ??
            }
            buffer.append(hex);
        }
        return buffer.toString().toUpperCase();
    }

为啥呢1 :保持二进制补码的一致性,因为计算机保存机制是:正数存储的二进制原码,负数存储的是二进制的补码

为啥呢2:如果是十六进制的0f,默认只显示f,此时要补上0

注:当系统检测到byte可能会转化成int或者说byte与int类型进行运算的时候,就会将byte的内存空间高位补1(也就是按符号位补位)扩充到32位,再参与运算。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值