Integer.toHexString((byte & 0xFF) | 0x100).substring(1, 3)

Integer.toHexString要求入参为int基本类型

(byte & 0xFF) | 0x100会计算得出一个byte,之后byte转int,正数会高24位补0,负数会高24位补1,接着截取字符串

**byte & 0xFF ** java中byte转int采取的补符号位扩展,这一段的作用是补零扩展。因为补符号位扩展的结果是十进制不变,原二进制改变。补零扩展为十进制改变,但是二进制不变。这里关心的并不是扩展后十进制是否相同,而是关心的二进制是否相同。

(byte & 0xFF)的目的是高24位取0,低8位比如是0111 1111,再或上0x100(二进制为1 1111 1111),结果为1 0111 1111,相当于保证了计算结果的16进制的字符长度大于3

疑问:byte & 0xFF的目的还有个没搞清楚的,就是这里还是byte得操作,怎么就要扩展为int了。找了些资料说系统检测到byte会转int就会先做扩展。感觉这个解释有些牵强。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容