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]。如:byte类型的-1是11111111
  • 例:
    byte类型的负数-12,java中表示:10001100
    直接补位(补符号位扩展)的话:11111111 11111111 11111111 10001100
    转换为16进制字符串结果:fffffff4
    &0xFF的结果:00000000 00000000 00000000 10001100
    转换为16进制字符串结果:f4

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

发布了95 篇原创文章 · 获赞 43 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/lyxuefeng/article/details/103892306