2010-05-24 39 views
6

Tôi có một khung 22 byte. Khung là luồng đầu vào từ gia tốc kế thông qua bluetooth. Các số đọc gia tốc là một số 16 bit được chia thành hai byte.Hợp nhất hai byte trong java/android

Khi tôi cố gắng hợp nhất các byte với bộ đệm [1] + bộ đệm [2], thay vì thêm các byte, nó chỉ đặt kết quả cạnh nhau. vì vậy 1 + 2 = 12.

Ai đó có thể cho tôi biết cách kết hợp hai byte này để lấy số ban đầu. (Btw các byte được gửi về cuối nhỏ)

Cảm ơn

+0

Xem xét hoạt động bitwise và bit-shift. http://leepoint.net/notes-java/data/expressions/bitops.html – HXCaine

+0

Hãy xem câu hỏi này: http://stackoverflow.com/questions/1026761/how-to-convert-a-byte-array -to-its-number-value-java –

Trả lời

17

đây là các mã:

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

Thats tuyệt vời, Cảm ơn một triệu – Shane

+0

@Shane, nếu điều này làm việc cho bạn, bạn nên 'Chấp nhận' câu trả lời :) – reflog

+0

Xin lỗi tôi đã không nhận ra bạn có thể chấp nhận câu trả lời. Cảm ơn! – Shane

-1

Dưới đây là một câu trả lời tốt hơn mà có thể làm cho một chút ý nghĩa hơn ...

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

(b2 & 0xFF) xuất hiện cùng mẫu nhị phân chính xác.

+0

Điều đó hoàn toàn sai và có thể mang lại kết quả sai. The & OxFF là phải! Điều này là do thực tế rằng một số kiến ​​trúc Java thực hiện các chương trình khuyến mãi số nguyên nên nếu 'b2'> 127 kết quả sẽ có dấu âm (bit cao nhất của 'b2' trở thành bit dấu vì nó được thăng lên bit thứ 32) . Cá nhân tôi đã thấy điều này xảy ra (Trên thiết bị Android 6) – DanielHsH