如何查找Java中从数据流中读取的时间戳和十进制值

问题描述

因此,如果我们假设使用串行端口将以下数据从微控制器流式传输到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