簡體   English   中英

在java中將兩個字節(一個正面和另一個負面)組合成短

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM