为了账号安全,请及时绑定邮箱和手机立即绑定

foreach取buf里面的每一个byte以后,为什么还要&0xff,一个byte不是已经8bit了吗

        for(byte b:buf){
            System.out.print(Integer.toHexString(b & 0xff)+" ");
        }

正在回答

2 回答

byte b = -13;

System.out.println(Integer.toHexString(b));// fffffff3

System.out.println(Integer.toHexString(b & 0xff));// f3

0 回复 有任何疑惑可以回复我~
#1

Antique 提问者

这段代码我有敲过, 看了你的第二句话突然明白,toHexString的参数得要是int,所以byte类型自动类型转换成了32bit的int,然后又需要把前面24位去掉了,感谢你
2017-01-05 回复 有任何疑惑可以回复我~

byte可能是负数(比如中文对应的字节),而toHexString(int b)的参数是int类型,所以可以使用0xff将高位的都清除,只剩地位的8个bit。

1 回复 有任何疑惑可以回复我~
#1

Antique 提问者

还是不能理解,一个byte本身已经只有8bit了,再取出来其中的最后8bit?有点怪
2017-01-05 回复 有任何疑惑可以回复我~
#2

邓孤思 回复 Antique 提问者

byte b = -13; System.out.println(Integer.toHexString(b));// fffffff3 System.out.println(Integer.toHexString(b & 0xff));// f3
2017-01-05 回复 有任何疑惑可以回复我~
#3

Antique 提问者 回复 邓孤思

我才发现在4-2有这个的解释。。。
2017-01-05 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

foreach取buf里面的每一个byte以后,为什么还要&0xff,一个byte不是已经8bit了吗

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信