从Java ByteBuffer中的byte获取低阶和高阶nybbles

时间:2012-02-28 16:52:24

标签: java byte mask bytebuffer bit-shift

我需要从存储在ByteBuffer(小端序)中的字节中提取两个整数值

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

我需要从ByteBuffer中的任何字节获取的值是:

长度=低阶半字节的整数值

频率=高阶半字节的整数值

目前我正在使用以下代码提取低阶nybble:

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

这似乎非常有效。然而,这似乎是高阶的nybble,我似乎无法正确解释。

我对位移或屏蔽感到有些困惑,我认为我需要执行它,任何建议都会非常有帮助。

非常感谢!!

2 个答案:

答案 0 :(得分:8)

  

我需要从一个字节中提取两个整数值

所以你需要得到一个不是int的字节,字节顺序无关紧要。

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

答案 1 :(得分: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));