Получить nybbles низкого и высокого порядка из байта в Java ByteBuffer - PullRequest
4 голосов
/ 28 февраля 2012

Мне нужно извлечь два целочисленных значения из байта, хранящегося в ByteBuffer (порядок с прямым порядком байтов)

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

Значения, которые мне нужно получить из любого байта в ByteBuffer:

длина = целочисленное значение полубайта младшего разряда

частота = целочисленное значение полубайта старшего разряда

В данный момент я извлекаю нижний пределзакажите nybble с этим кодом:

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

, который, кажется, работает отлично.Однако, как мне кажется, у меня возникают проблемы с правильной интерпретацией.

Я немного путаюсь со сдвигом или маскированием битов, которые, я думаю, мне нужно выполнить, и любой совет будет очень полезным.

Большое спасибо !!

Ответы [ 2 ]

8 голосов
/ 28 февраля 2012

Мне нужно извлечь два целых значения из байта

Таким образом, вам нужно получить байт, а не целое число, и порядок байтов не имеет значения.

int lowNibble = bb.get(index) & 0x0f; // the lowest 4 bits
int hiNibble = (bb.get(index) >> 4) & 0x0f; // the highest 4 bits.
1 голос
/ 28 февраля 2012

Чтобы получить клев высокого порядка, все, что вам нужно сделать, это битовое смещение;младшие биты просто упадут.

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