2010-05-24 2 views
6

У меня есть кадр из 22 байтов. Кадр - это входной поток от акселерометра через Bluetooth. Показания ускорителя - это 16-разрядное число, разделенное на два байта.Объединить два байта в java/android

Когда я пытаюсь объединить байты с буфером [1] + buffer [2], вместо добавления байтов, он просто ставит результаты бок о бок. поэтому 1 + 2 = 12.

Может ли кто-нибудь сказать мне, как объединить эти два байта, чтобы получить исходный номер. (Кстати байты посылаются немного обратный порядок байт)

Благодаря

+0

Посмотрите на побитовые и битовые операции. http://leepoint.net/notes-java/data/expressions/bitops.html – HXCaine

+0

Посмотрите на этот вопрос: http://stackoverflow.com/questions/1026761/how-to-convert-a-byte-array -to-its-numeric-value-java –

ответ

17

вот код:

public static short twoBytesToShort(byte b1, byte b2) { 
      return (short) ((b1 << 8) | (b2 & 0xFF)); 
} 
+0

Thats great, Thanks a million – Shane

+0

@Shane, если это работает для вас, вы должны «принять» ответ :) – reflog

+0

Извините, я не понял, что вы можете принять ответы. Благодаря! – Shane

-1

Вот лучший ответ, который мог бы сделать немного больше смысла ...

public static short twoBytesToShort(byte b1, byte b2) { 
      return (short) ((b1 << 8) | b2); 
} 

(b2 & 0xFF) выходит с тем же самым точным бинарным рисунком.

+0

Это совершенно неправильно и может привести к неправильному результату. The & OxFF - это необходимо !!! Это связано с тем, что некоторые Java-архитектуры выполняют целые рекламные акции, поэтому, если «b2»> 127, результат будет иметь отрицательный знак (старший бит «b2» стал знаковым битом, так как он был увеличен до 32-го бита целого числа) , Я лично видел это (на устройствах Android 6) – DanielHsH

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

  • Нет связанных вопросов^_^