java 中的 byte 类型是有符号的,值得范围是 - 128-127
做网络通讯时,接收过来的数据往往都是无符号的 byte,值得范围是 0-255
因此直接转换时,存储到 java 显示的值就会有问题
- int ori = 200;
- System.out.println("原始byte值:" + ori);
- Byte b = (byte) ori;
- System.out.println("java中byte值:" + b);
- Integer i = b.intValue();
- System.out.println("转换后的int值:" + i);
- System.out.println("存储的2进制值:" + Integer.toBinaryString(i));
- Integer i_trans = i & 0xFF;
- System.out.println("&0xFF后的:" + i_trans);
输出如下:
- 原始byte值:200 java中byte值: - 56转换后的int值: - 56存储的2进制值:11111111111111111111111111001000 200
例如接收到一个无符号的 byte,值 200,转到 java 中的 byte,转换后就是 - 56,因此显示就不正确,需要将服务号的转成有符号的
计算方法就是与 0xFF 做一个 & 运算,也就是与 11111111 做一个 & 计算即可
来源: http://www.bubuko.com/infodetail-1860771.html