2012-02-28 152 views
4

我需要從存儲在字節緩衝區(小端排序)內的字節中提取兩個整數值獲取的Java字節緩衝區內從字節低和高次半字節

ByteBuffer bb = ByteBuffer.wrap(inputBuffer); 
bb.order(ByteOrder.LITTLE_ENDIAN); 

我需要從內的任何字節,得到的值字節緩衝區是:低半字節的

長度=整數值高位半字節的

頻率=整數值

目前我正在使用此代碼提取低位半字節:

length = bb.getInt(index) & 0xf; 

這似乎很好地工作。然而,我似乎無法正確解釋錯誤的高階低頻。

我對位移或掩碼有點困惑,我認爲我需要執行,並且任何建議都會超級有用。

非常感謝!

+0

請發佈您試過的代碼並描述它到底有什麼問題。 – Mat 2012-02-28 16:58:27

回答

8

我需要從一個字節

所以,你需要獲得一個字節不是int提取兩個整數值,而字節順序並不重要。

int lowNibble = bb.get(index) & 0x0f; // the lowest 4 bits 
int hiNibble = (bb.get(index) >> 4) & 0x0f; // the highest 4 bits. 
+0

謝謝彼得,只是票! – Tony 2012-02-28 17:07:33

1

要獲得高階半字節,只需要進行位移;低位會簡單地下降。

int val = 0xAB; 
int lo = val & 0xF; 
int hi = val >> 4; 
System.out.println("hi is " + Integer.toString(hi, 16)); 
System.out.println("lo is " + Integer.toString(lo, 16)); 
+0

看看int val =(byte)0xAB;';) – 2012-02-28 18:29:20