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

我是资源的搬运工~~~

关于这个字节数组转化为十六进制字符串时 &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位,再参与运算。

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值