簡體   English   中英

從Java字節中提取半字節

[英]Extracting Nibbles from Java Bytes

Hex:[0A][52][08][01][01][01][00][CD][21][02][59]


0      [0A]
1      [52]         Packettype    = TEMP_HUM
2      [08]         subtype       = TH8 - 
3      [01]         Sequence nbr  = 1
4/5    [01][01]     ID            = 257
6/7    [00][CD]     Temperature   = 20.5 °C
8      [21]         Humidity      = 33
9      [02]         Status        = Dry
10     [5] *nibble           Signal level  = 5
11     [9] *nibble           Battery       = OK

因此,我通過串行端口獲得了11個字節(十六進制)。 我將所有字節分配給一個字節數組,以便以后使用。

我有兩個問題:

1]如何在Java中將4和5個字節重新組合在一起(我在INT中假定)? 2]如何提取最后一個字節的10和11或高半字節和低半字節?

[下面的注釋]字節示例:高[0101] [0110]低lowNibble = yourbyte&0x0f; 01010110&0x0f(00001111)= 00000110

           highNibble = yourByte >>>> 4
           01010110 >>> 4 = 00000101


          IF you use this Example Byte: High[1101][0110]Low
          highNibble = yourByte >>> 4
          11010110 >>> 4 = 00000101
          Because >>> removes the signed bit.

1)取決於字節序。 要么是(b[4] << 8) | b[5] (b[4] << 8) | b[5](b[5] << 8) | b[4] (b[5] << 8) | b[4]

2) lowNibble = yourByte & 0x0f; highNibble = (yourByte >> 4) & 0x0f; lowNibble = yourByte & 0x0f; highNibble = (yourByte >> 4) & 0x0f;

您也可以這樣做: lowNibble = yourByte & 0x0f; highNibble = yourByte >>> 4; lowNibble = yourByte & 0x0f; highNibble = yourByte >>> 4;

無符號移位( >>> )會將零填充高位,而與符號無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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