Как мне получить 4-битные данные из 16-битных данных? - PullRequest
2 голосов
/ 30 сентября 2019

Я использовал метод getShort () byteBuffer, чтобы получить короткое значение, я преобразовал его в целое число и напечатал двоичное значение, которое представляет собой 16-битные данные, мне нужно получить доступ к значению int начального 4-битного из этого 16-битногоdata.

short bitRateShort = buf.getShort(32 + 2);
int bitRateInteger = Short.toUnsignedInt(bitRateShort);
System.out.println(bitRateInteger);//46144
System.out.println(Integer.toBinaryString(bitRateInteger));// 1011010001000000

Мне нужно получить целочисленное значение для начальных 4 битов, которое в моем случае равно 1011. Как я могу замаскировать эти 16 битов, чтобы получить 4-битный клев?

Ответы [ 2 ]

3 голосов
/ 30 сентября 2019

Попробуйте это:

int bitRateInteger = 46144;
System.out.println(Integer.toBinaryString(bitRateInteger&0xF000));
System.out.println(Integer.toBinaryString((bitRateInteger&0xF000)>>12));

Вывод:

1011000000000000
1011

Сначала мы маскируем начальные 4 бита с помощью битовой маски 0xF000 (двоичный 0b1111_0000_0000_0000). Затем мы сдвигаем результирующие биты вправо на 12, чтобы избавиться от «известных» нулей в конце.

Редактировать: Как любезно указал @CarlosHeuberger, выдаже не нужно выполнять операцию &, поскольку >> по умолчанию усекает все правые биты. Итак, сделайте это вместо:

int bitRateInteger = 46144;
System.out.println(Integer.toBinaryString(bitRateInteger>>12));

Вывод:

1011
0 голосов
/ 30 сентября 2019

Я согласен с ответом Ави.

Вот другой подход: -

String first4char = Integer.toBinaryString(bitRateInteger).substring(0,4);
int intForFirst4Char = Integer.parseInt(first4char);

System.out.println(intForFirst4Char );
...