问题描述
因此,如果我们假设使用串行端口将以下数据从微控制器流式传输到Java中:
0x21 0x32 0xCC 0x00 0x3A 0x98 0x02 0x12 0x03 0x21 0x33 0x01 0xC2
我最初认为第一个字节是魔术数字,第二个字节是密钥。因此,难道不是让数字0xCC 0x00 0x3A 0x98 0x02 0x12 0x03 0x21 0x33 0x01 0xC2
等于我们从微控制器读取的值吗?我们只是将所有数字组合在一起以获得以下十进制读数:204058... and on
?>
对于时间戳,我们是否只是将0x32
的第二个字节转换为50 unites of time
的十进制?
解决方法
引用评论:
在文档中提到有效负载是一个键值对,而0x32表示“时间戳,4字节整数,自复位以来的毫秒数”和0x33表示“电位计读数,2字节整数A / D计数”,因此这意味着我下次点击第二个数字0x32时,由于它是一个4字节的整数,我们将0xCC和0x00 0x3A和0x98合并?
引用问题中的示例数据:
0x21 0x32 0xCC 0x00 0x3A 0x98 0x02 0x12 0x03 0x21 0x33 0x01 0xC2
因此,键/值对,其中键是一个字节,并且每个键具有不同长度的值。
0x32用于表示“时间戳,4字节整数,自复位以来的毫秒数”
0x21 0x32 0xCC 0x00 0x3A 0x98 0x02 0x12 0x03 0x21 0x33 0x01 0xC2
^^^^ ^^^^^^^^^^^^^^^^^^^
key 4-byte integer
这4个字节可以是big-endian或little-endian,但是big-endian在设备中更为常见,因此:
0xCC003A98 = 3422567064 ms = 39 days 14 hrs 42 mins 47.064 secs
0x33“电位计读数,2字节整数A / D计数”
0x21 0x32 0xCC 0x00 0x3A 0x98 0x02 0x12 0x03 0x21 0x33 0x01 0xC2
^^^^ ^^^^^^^^^
key 2-byte integer
0x01C2 = 450