2015-11-11 3 views
0

В моем приложении Android я получаю от данных датчиков размером 8 байт через Bluetooth Smart с помощью Bluetooth BluetoothGatt. Данные содержат значения температуры, давления и влажности. Значения разделяются следующим образом.Изоляция произвольных битов из массива байтов

ДАВЛЕНИЯ: Байт 1 + Байт 2 + первый 4 бита байт 3, остальные 4 бита равны 0

ТЕМПЕРАТУРА: Байт 4 + Байт 5 + первые 4 бита Байт 6, остальные 4 бита равны 0

ВЛАЖНОСТЬ: Байт 7 + Байт 8

Сейчас на данный момент у меня есть массив байтов, который содержит 8 байт.

Моя проблема заключается в том, что я не знаю, как извлекать или изолировать биты для температуры, давления и влажности, как описано выше. У кого-нибудь есть идея, как это решить?

+0

Этот байтовый поток большой эндиан или маленький конец? –

+0

Это байт [] или что-то еще? –

+0

Это большой конец и да, это байт []. – ThoKun

ответ

0

Чтобы извлечь значения, вам необходимо использовать операции манипуляции бит.

Например

int pressure = (byte[0]&0xff)<<16+(byte[1]&0xff)<<8+(byte[2]&0xff) 

(16S-8s и, возможно, должны быть 12 и 4 или 4 и 0 12 в зависимости от того, что именно это означает).

Операции, которые вам нужно < < который сдвигает биты в байте вокруг и & 0xff который изменяет подписанные байты в знаковом целое число, прежде чем перенести его. В противном случае бит знака будет испорчен.

+0

спасибо за ваш ответ. Что вы имеете в виду с «16 и 8, возможно, должно быть 12 и 4 или 0 4 и 12 в зависимости от того, что это значит»? – ThoKun

+0

@ThoKun Не нужно благодарить, хотя, если это помогло вам почувствовать себя свободным, чтобы поддержать и/или принять ответ, используя стрелки и галочку. –

Смежные вопросы