2010-05-24 6 views
6

Ich habe einen Rahmen von 22 Bytes. Der Rahmen ist der Eingabestrom von einem Beschleunigungsmesser über Bluetooth. Die Beschleunigungsmesserablesungen sind eine 16-Bit-Nummer, die über zwei Bytes aufgeteilt ist.Merge zwei Bytes in Java/Android

Wenn ich versuche, die Bytes mit Puffer [1] + Puffer [2] zusammenzuführen, anstatt die Bytes hinzuzufügen, legt es nur die Ergebnisse nebeneinander. also 1 + 2 = 12.

Könnte mir jemand sagen, wie man diese zwei Bytes kombiniert, um die ursprüngliche Zahl zu erhalten. (Btw die Bytes gesendet Little-Endian)

Dank

+0

Schauen Sie sich bitweise und Bit-Shift-Operationen an. http://leepoint.net/notes-java/data/expressions/bitops.html – HXCaine

+0

Werfen Sie einen Blick auf diese Frage: http://stackoverflow.com/questions/1026761/how-to-convert-a-byte-array -to-its-numeric-value-java –

Antwort

17

hier ist der Code:

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

Das ist toll, Danke eine Million – Shane

+0

@Shane, wenn dies für Sie funktioniert, sollten Sie die Antwort "akzeptieren" :) – reflog

+0

Sorry, ich hatte nicht realisiert, dass Sie Antworten akzeptieren könnten. Vielen Dank! – Shane

-1

Hier ist eine bessere Antwort, die ein wenig mehr Sinn machen könnte ...

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

(b2 & 0xFF) kommt mit dem gleichen genauen Binärmuster heraus.

+0

Das ist völlig falsch und könnte ein falsches Ergebnis liefern. Das & OxFF ist ein Muss !!! Dies liegt an der Tatsache, dass einige Java-Architekturen Integer-Promotions durchführen, wenn also 'b2'> 127 das Ergebnis ein negatives Vorzeichen hat (das höchste Bit von 'b2' wurde das Vorzeichen-Bit, da es zum 32'ten Bit der ganzen Zahl hochgestuft wurde) . Ich habe das persönlich gesehen (auf Android 6 Geräten) – DanielHsH