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