大猫爱学习
2017-03-23 18:04
if(buf[i]<=0xf) System.out.print("0"); System.out.print(Integer.toHexString(buf[i]&0xff)+" "); if(count++%10==0) System.out.println(); }
为什么会出现0b7 0c5 0c8 0eb 0d7 数字
看看你的项目的编码格式吧,我的是utf-8的,这样也是三位,视频里面的项目编码格式是GBK的
这个应该是由于高位是1开头的,默认负数,所以buf[i]<=0xf是一定成立的,要改成(buf[i]&0xff)<0xf才能正确,并不是编码的问题
会不会是另一个原因?debug一下,当进行比较大小的时候,高位是1开头的,默认负数,在计算时自然小于0xf,但实际并不小于,此时如果和0xff相与结果还会是正常的,因为负数的原因所以那儿被认为是小于16,所以加了个0,变成3位的了。
举例来说 某个1开头的字节,你按32位000000000000000000000000,1xxxxxx假设的。。正数是100多,只算负数就是-49。当系统用字节进行比较的时候,应该直接拿了-49的值去比较了。。此时因为我们写的程序就会在前面多加了一个0.
默认gbk 可行,大概是这个原因吧
文件传输基础——Java IO流
133754 学习 · 1030 问题
相似问题