Integer.toHexString(b[i] & 0xFF)浅析

在加密代码中,经常看到类似Integer.toHexString(b[i] & 0xFF)这样的代码,那么这行代码到底是什么意思呢(b是一个byte[])?为什么要&0xFF呢?

  • 这句代码的最终目的是把byte[]转换为16进制字符串
  • toHexString()是把一个int转换为十六进制String
  • & 0xFF是为了保证byte类型转int后其二进制的一致,即补零扩展。那么为什么要补零扩展呢?因为我们是要把每一个byte类型的数据都转换位16进制字符串,补零扩展的话就可以忽略前24位
  • 对于正数,byte可以直接转int,但是当byte类型的数是负数时,就比较特殊了。
    1. int是32位,byte是8位,所以需要补位
    2. 负数在java中是以补码表示(可参考:java中负数的表示
    3. byte是一个字节,最高位为符号位,则范围为[10000000,01111111],即[-128,127],注意此处范围边界值10000000为-128。如:byte类型的-1是11111111
  • 例:
    byte类型的负数-12,java中表示:1111 0100
    直接补位(补符号位扩展)的话:11111111 11111111 11111111 11110100
    转换为16进制字符串结果:fffffff4
    &0xFF的结果:00000000 00000000 00000000 1111 0100
    转换为16进制字符串结果:f4

我想,看到这转为16进制的结果也应该明白为什么要&0xff了吧

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值