我已經完成了位/字節級的操作,所以請原諒我,如果這很簡單。從字節數組轉換爲短的錯誤負值
我正在通過嵌入式設備的Java應用程序中的TCP套接字接收數據。數據是小端(最低有效字節在前),我目前正試圖從數據陣列中獲取short
值。要做到這一點,我用下面的代碼:
byte[] valBytes = {data[0], data[1]};
short val = EndianArrayUtils.getShortFromLittleEndianRange(valBytes);
也能正常工作正數,但是當short
應爲-1,我越來越-2代替。產生-2的數據是:
byte[] valBytes = {(byte)0xff, (byte)0xff};
short val = EndianArrayUtils.getShortFromLittleEndianRange(valBytes);
我錯過了什麼嗎? -1的二進制補碼應該是11111111 11111111
是否正確?
編輯
我完全忘了,我是真地寫過EndianArrayUtils
之一。對於getShortFromLittleEndianRange
方法的代碼是
public static short getShortFromLittleEndianRange(byte[] range){
return (short)((short)(range[1] >> 8) + (short)(range[0]));
}
顯然有什麼毛病怎麼說對負數操作。
從哪兒是EndianArrayUtils?你說得對,-1應該是ffff,我猜這些utils在轉換成short時會失敗。 EndianArrayUtils是否來自某個庫?如果沒有,你可以顯示一些代碼嗎? – Fildor
@Fildor我是個白癡。我很久以前寫過'EndianArrayUtils',並且忘記了它。我曾經認爲這是一個Java類哈哈。讓我得到該代碼併發布。 –
:)這是沒有什麼可以稱自己是一個白癡。這是一個很好的界面,不是嗎? – Fildor