在Java ByteBuffer中从字节中获取低位和高位nybbles

4

我需要从ByteBuffer(小端序)中提取两个整数值。

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

我需要从ByteBuffer中获得的值是:

length = 低位半字节的整数值

frequency = 高位半字节的整数值

目前,我正在使用以下代码提取低位半字节:

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

看起来这个程序很完美地工作了。然而,我好像无法正确地解释高阶 nybble。

我对位移或掩码有些困惑,我认为我需要执行这些操作,任何建议都将非常有帮助。

非常感谢!


请发布您尝试过的代码,并准确描述其中的问题。 - Mat
2个回答

8

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

所以你需要获取一个字节而不是一个整数,并且字节顺序并不重要。

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

谢谢你,Peter!这正是我需要的! - Tony

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));

看看 int val = (byte) 0xAB; 会发生什么吧 ;) - Peter Lawrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接