2010-05-24 13 views
6

Tengo una trama de 22 bytes. El marco es la corriente de entrada desde un acelerómetro a través de bluetooth. Las lecturas del acelerómetro son un número de 16 bits dividido en dos bytes.Combinar dos bytes en java/android

Cuando intento combinar los bytes con el búfer [1] + búfer [2], en lugar de agregar los bytes, simplemente coloca los resultados uno al lado del otro. entonces 1 + 2 = 12.

Podría alguien decirme cómo combinar estos dos bytes para obtener el número original. (Por cierto, los bytes se envían little endian)

Gracias

+0

Analice las operaciones en modo bit y bit-shift. http://leepoint.net/notes-java/data/expressions/bitops.html – HXCaine

+0

Eche un vistazo a esta pregunta: http://stackoverflow.com/questions/1026761/how-to-convert-a-byte-array -to-its-numeric-value-java –

Respuesta

17

aquí está el código:

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

Eso es genial, gracias a un millón – Shane

+0

@Shane, si esto funciona para usted, debe 'Aceptar' la respuesta :) – reflog

+0

Lo siento, no me había dado cuenta de que podía aceptar respuestas. ¡Gracias! – Shane

-1

Aquí es una respuesta mejor que podría hacer un poco más de sentido ...

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

(b2 & 0xFF) sale con el mismo patrón binario exacto.

+0

Eso es completamente incorrecto y podría dar un resultado incorrecto. ¡El & OxFF es imprescindible! Esto se debe al hecho de que algunas arquitecturas Java realizan promociones enteras, por lo que si 'b2'> 127 el resultado tendrá un signo negativo (el bit más alto de 'b2' se convirtió en el bit de signo desde que se promovió a 32'th bit of integer) . Personalmente, he visto esto sucediendo (en dispositivos con Android 6) – DanielHsH