1.問題由來
項目中遇到一個将byte位元組流轉換成有符号整數和無符号整數的,發現:
byte aByte = ByteBuffer.get();----對應的二進制各位
如果byte為正數:int value = (byte)aByte ----> 比如 傳輸8位bits為 0x7f
轉化為位元組為:aByte=127: 01111111 轉化為 int 就是:00000000 00000000 00000000 01111111
如果byte為負數:int value = (byte)aByte ---->比如 傳輸8位bits為 0xff
轉化為位元組為:aByte=-1 : 11111111 轉化為 int 就是:11111111 11111111 11111111 11111111
(注意:負數在計算機中以補碼方式存儲 是以有: -1= [10000001]原->[111111110]反->[11111111]補)
那麼轉化為無符号整數就不能直接轉byte值。(負數或者>127的正數都不行)
那麼問題是:如何把byte值還原成無符号值并放入int 中
2.解決方法
首先,參考自一個部落格:http://www.360doc.com/content/10/0813/21/495229_45854066.shtml
這裡面解釋了byte轉int要與0xff與的原因。
經典的例子是:
(1)System.out.println((byte)-1);// -1
(2)System.out.println((byte)-1 & 0xff);// 255
(1)中,(byte)-1自動轉化成int,由于位數拓展了,負數位數拓展(8bit--->32bit),則補1,值發生了改變
(2)中,(byte)-1 &0xff 則,byte轉成int
即11111111 11111111 11111111 11111111 & 00000000 00000000 00000000 11111111(0xff)
前24位被置零,是以得到最初的0xff值