数据解析
何时会用到数据解析:
在数据传输中,我们经常会需要规定数据的一些格式,这就需要我们对数据进行组包、拆分操作,因此,只要有数据报文的传输,那么就一定有数据解析的存在。下面以一个具体的示例来详细的描述数据解析的过程以及代码框架。
逻辑上的拆包:
逻辑上的拆包主要是搞懂"帧头是什么"、"数据段传递了什么"、"校验位如何规定的"这三个问题。
首先我们需要在相应的协议文档找到数据的格式是什么样子的,比如在下图,数据格式就是由帧起始位、帧长度域等组成的,这一部分往往是报文的控制内容。



接下来我们需要找到数据域是如何组成的,这代表这一个报文数据所要传递的信息,比如在下图,数据域就要传递采集时间、表底值等信息。


最后我们需要搞清楚校验位是怎么计算的,这关系着接收时如何去判断数据包的正确性。比如在当前举例的协议中,校验位是1位,它是校验和的计算模式,文档中的描述如下:

报文拆包示例:
下面举一个例子来应用上述的拆包流程。真实的0x31报文如下:
68002e03333832363030303100000000000000000001310dc6044c00000000000000000000000000000000000000000000ec
这是一段由十六进制展示的0x31报文,68代表0x68。帧结构如下:

根据这个结构,我们可以清晰的得知:
| 内容含义 | 内容数据 |
| 帧起始位 | 0x68 |
| 帧长度域 | 0x00 0x2e |

最低0.47元/天 解锁文章
1615

被折叠的 条评论
为什么被折叠?



