Java:读取可变数量的位并转换为整数

时间:2014-05-08 00:05:39

标签: java bits bytebuffer

我需要编写一个从 Byte 缓冲区中读取可变位数的方法,并将这些字节转换为原始intlong(如果超过32)位)。我不太熟练使用位,但我确实看了一些代码示例和类似(ish)问题的答案,这是我能想到的最好的(bb指的是内部{{1 }}):

ByteBuffer

public int readBits(int number) { int initialPosition = bb.position(); int value = 0; int remaining = number; int position = bb.position(); while (remaining > 0) { int index = (position >> 3); int bit = (position & 7); int bitsLeft = Math.min(8 - bit, remaining); int nibble = (bb.get(index) >> (bit & BIT_MASKS[bitsLeft])); value |= nibble << (number - remaining); position += bitsLeft; remaining -= bitsLeft; } bb.position(initialPosition + ((position - initialPosition) >> 3)); return value; } 数组定义如下:

BIT_MASKS

我使用此测试代码测试了此方法:

    private static final int[] BIT_MASKS = new int[] { 0, 0x1, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, 0xff };

我预计值为6,但它打印12,我不知道为什么。

我很感激这方面的一些帮助。感谢。

0 个答案:

没有答案