Преобразование разделов байтовых массивов в целочисленные значения - PullRequest
0 голосов
/ 01 июля 2011

В настоящее время я делаю приложение для Android, которое принимает измерение Bluetooth с устройства.Способ упаковки данных - 4 байта.Мне нужно получить два значения из этих байтов.

Первое значение состоит из: 6 бит и 7 бит первого байта и от 0 до 6 бит байта 2

Второе значение проще и состоит из полного 3-го байта.

Каков хороший способ получить доступ к этим битовым значениям, объединить их и преобразовать в целочисленные значения?Сейчас я пытаюсь преобразовать массив байтов в набор битов, а затем получить доступ к отдельным битам, чтобы создать новые байты, которые затем будут преобразованы в целое число.

Спасибо, и, пожалуйста, спросите, не достаточно ли я ясен.

Ответы [ 2 ]

2 голосов
/ 01 июля 2011

Я понял: я преобразовал байтовый массив в int, используя этот метод

public static int byteArrayToInt(byte[] b, int offset) { 
   int value = 0; 
   for (int i = 0; i < 4; i++) { 
      int shift = (4 - 1 - i) * 8; 
      value += (b[i + offset] & 0x000000FF) << shift; 
   } 
   return value; 
} 

Затем я использовал описанный метод pokey.Спасибо за вашу помощь!

1 голос
/ 01 июля 2011

Я не уверен, правильно ли я понял ваш формат.Соответствует ли эта битовая маска вашему первому значению?

0xC07F0000

Это биты 16-22,30,31 (здесь используется индексирование на основе нуля, т.е. бит 31 - последний бит).

Другойвещь, ваша ценность должна быть подписана или не подписана?

В любом случае, если это так, как я предполагаю, вы можете преобразовать его следующим образом с помощью некоторых битовых масок:

unsigned int val = 0xdeadbeef;

unsigned int mask1 = 0xC0000000;
unsigned int mask2 = 0x007F0000;

unsigned int YourValue = (val&mask1)>>23 | (val&mask2)>>16;

Сделайте это втак же, как с другими вашими ценностями.Определите битовую маску и сдвиньте ее вправо.Готово.

Приветствия

...