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做一個&計算即可
