[英]Combine two bytes (one positive and another negative ) into short in java
我試圖在java中移植我的C ++項目。 在線下我必須從串口讀取一些字節並將兩個字節合並為短。 使用下面的代碼可以很好地工作。
ByteBuffer bb = ByteBuffer.allocate(2);
bb.order(ByteOrder.LITTLE_ENDIAN);
bb.put(b1);
bb.put(b2);
result = bb.getShort(0);
在c ++項目而不是short中,他們有unsigned short(在java中我們沒有unsigned)。
So my above logic result does not align with C++ result for below case:-
b1 = 106 , b2 = -1 c++ result = 150 and java = -150
b1 =-6, b2 = -1 506 in VC++ but -6 in java
However, if only first byte is negative then my result are similar :
b1 = -12 , b2 = 1 c++ result = 500 and java = 500
我想將結果與c ++對齊。 任何建議和幫助都會非常值得注意。
不要使用getShort()
,而是使用getInt()
。
您的問題是最重要的位被解釋為符號位,因為這是簽名短路的情況。 如果擴展數據類型以使該位不再被視為符號位,則應該獲得所需的行為。
您可能需要填充緩沖區來執行此操作:
ByteBuffer bb = ByteBuffer.allocate(4);
bb.order(ByteOrder.LITTLE_ENDIAN);
bb.put(b1);
bb.put(b2);
bb.put(0);
bb.put(0);
result = bb.getInt(0);
編輯:如果只有C ++代碼正在做正確的事情,這將有效,但正如上面的評論所指出的那樣,它不是(即它不是簡單地取兩個字節並將它們組合成一個短的。它執行其他一些轉換它們)。
java -6(0xFFFA)是正確的,C ++ 506(0x01FA)不是。 0xFA回應。 似乎你錯誤輸入-1:1或 - -1。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.