比如针对下面的这样一个协议:
(资料图)
数据在发送时涉及到一个大小端的概念,大小端是针对多字节数据的传输,比如上述协议中字段1,假设两字节内容为0x0001,先发送0x01后发送0x00,称为小端模式;先发送0x00后发送0x01,称为大端模式。
假设字段1内容为0x001,字段2内容为0x40533333(对应为3.3)
假设按照小端方式发送,下面是帧数据:
55 AA 01 00 33 33 53 40 ED
下面来看看如何解析:
简单来说就是硬来,按照数组的先后顺序逐个重组解析,如果协议比较长,代码里会充斥着很多的数组下标,一不小心就数错了。而且如果更改协议的话,代码要改动很多地方。
后来有人告诉我可以定义个结构体,然后使用memcpy函数直接复制过去就完事了。
再后来,又见到有人用如下代码实现:
除了上述2个函数,完整的转换包含以下函数,就是将Bytes转换为不同的数据类型,以及将不同的数据类型转换为Bytes。
组包的过程和解析的过程正好相反,这里不再赘述。你在开发中遇到这种问题时,又是如何处理的呢?欢迎留言讨论!