2010-05-24 18 views
6

22 baytlık bir çerçevem ​​var. Çerçeve, bluetooth üzerinden bir ivme ölçerden gelen giriş akışıdır. İvme okumaları iki bayt üzerinde 16 bitlik bir sayıdır. Java/android için iki bayt birleştirme

i tampon maddesi ile bayt birleştirme deneyin

[1] + [2], daha çok baytı eklemek yerine, sadece yan sonuçlar yan koyar tampon. böylece 1 + 2 = 12.

birisi nasıl asıl sayısını elde etmek için bu iki bayt birleştirmek söyler misiniz. (Btw bayt gönderilen küçük endian)

Teşekkür burada

+0

Bit ve kaydırma işlemlerine bakın. http://leepoint.net/notes-java/data/expressions/bitops.html – HXCaine

+0

mı bu soruya bir göz: http://stackoverflow.com/questions/1026761/how-to-convert-a-byte-array bu sizin için çalışıyorsa to-onun-sayısal değer-java –

cevap

17

kod: ...

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

Thats harika, teşekkürler milyon – Shane

+0

@Shane, cevabı 'kabul edilmelidir :) sana cevapları kabul edebileceğini fark hadnt – reflog

+0

üzgünüm. Teşekkürler! – Shane

-1

İşte biraz daha mantıklı olabilir, daha iyi bir cevap var

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

(b2 & 0xFF) aynı tam ikili modelle çıkıyor.

+0

Bu tamamen yanlıştır ve yanlış sonuç verebilir. & OxFF bir zorunluluktur! Bu, bazı Java mimarilerinin tamsayı promosyonları yapmasından kaynaklanmaktadır, bu yüzden eğer 'b2'> 127 sonucu negatif bir işarete sahip olacaksa ('b2' nin en yüksek bit'i, tamsayı 32.th bit'e yükseltildiğinden beri işaret biti haline geldi) . Bu olayı şahsen gördüm (Android 6 cihazlarda) – DanielHsH