1
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 バイト (16 進数) を取得します。後で使用できるように、すべてのバイトをバイト配列に割り当てました。

2 つの質問があります。

1] Java で 4 バイトと 5 バイトを結合するにはどうすればよいですか (INT であると想定しています)。2] 最後のバイトの 10 と 11 または High と Low ニブルをどのように抽出できますか?

[以下のコメントから] バイト例: High[0101][0110]Low 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.
4

1 に答える 1

6

1)エンディアンに依存します。(b[4] << 8) | b[5]または_(b[5] << 8) | b[4]

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

次のこともできます。lowNibble = yourByte & 0x0f; highNibble = yourByte >>> 4;

符号なしシフト(>>>)は、符号に関係なく、上位ビットをゼロで埋めます。

于 2013-02-02T20:39:05.463 に答える