我試圖簡化一些代碼解碼文件中的數據,我寫了一個測試用例來顯示這個問題。我可以簡化從二進制數據讀取短小
鑑於兩個字節爲0xFe
和0xFF
我想, 現有的代碼確實
headerBuffer.get() & 0xff + (headerBuffer.get() & 0xff) * 256
我想,如果我做了緩衝區的字節順序小端的是應該被理解成0xFFFE
(65534),我能得到同樣的結果,閱讀作爲短。但我沒有得到相同的結果,爲什麼不呢?
headerBuffer.getShort();
public void testReadingOfShort() {
ByteBuffer headerBuffer = ByteBuffer.allocate(2);
headerBuffer.order(ByteOrder.LITTLE_ENDIAN);
headerBuffer.put((byte) 0xFE);
headerBuffer.put((byte)0xFF);
headerBuffer.position(0);
int format = headerBuffer.get() & 0xff + (headerBuffer.get() & 0xff) * 256;
headerBuffer.position(0);
int formatNew = headerBuffer.getShort();
System.out.println("Format:"+format+"("+ Hex.asHex(format)+")"+":FormatNew:"
+formatNew+"("+Hex.asHex(formatNew)+")");
}
輸出
Format:65534(0xfffe):FormatNew:-2(0xfffffffffffffffe)
這是因爲一個'short'簽名!無論如何,我懷疑這裏的bug是在'Hex'類中的;顯示所有'.asHex()'方法的代碼 – fge