这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 通讯协议中的转义符应用

共1条 1/1 1 跳转至

通讯协议中的转义符应用

院士
2026-02-04 20:26:08     打赏
通讯协议中的转义符应用

在通讯的数据传输中,我们往往都是要应用一个通讯协议,比如http协议,TCP协议,Modbus协议等。对于数据流传输中的,帧首与帧尾的区分就非常重要。帧首定位错误,整帧数据无法解析,通讯就出现丢帧,延时增大等等异常现象。今天分享一下转义符在数据流中的帧首判定的应用。

帧首肯定也是一个字节(或多个字节),而数据中往往也存在着与”帧首“相同的字节序列。这时,如果数据中的”帧首“字节序列当成了帧首,那么,帧的解析一定是错误的。在错误的地方解析帧格式肯定是错误的嘛!

转义符(Escape Character)的应用就可以在一定程序上解决此问题,让帧首只会在帧首的位置出现。

转义符原理

转义符通常通过在特殊字符前添加一个特定的转义字符来实现。当编码时检测到特殊字符时,自动在前面插入转义字符,接收端再进行相应的解码处理。例如,我们选定帧头(如0x55)字节,转义符为0x1B。并定义如下转义规则:

  1. 原始数据中的帧首0x55 =>  转义为0x1B 0xE1;

  2. 原始数据中的转义符0x1B => 转义为0x1B 0xD2;

数据流实例

假设要发送的原始数据如下:

0x44 0x55 0x01 0x88 0x1B 0xAA

则编码过程如下:

0x44 => 0x44

0x55 => 0x1B 0xE1

0x01 => 0x01

0x88 => 0x88

0x1B => 0x1B 0xD2

0xAA => 0xAA

这里可以看到在原始数据中有帧首字节和转义符字节的数据,所以,我们必须将其通过转义符转义,以去除对帧首0x55字节的干扰。这样,编码后的数据帧如下:

55 44 1B E1 01 88 1B D2 AA

在接收端则进行解码操作:

0x55: 帧首标识符,去除

0x44:保留

0x1B 0xE1: => 0x55

0x01:保留

0x88:保留

0x1B 0xD2:=> 0x1B

0xAA:保留

最后,解码后的数据即为

0x44 0x55 0x01 0x88 0x1B 0xAA

转义符可以用来标识帧首与帧尾,防止误判数据中的帧首或帧尾,但其也会增加帧数据长度。

通讯协议中的帧首帧尾判断还有很多种,总有一款适合你。关注我,继续为大家分享!





关键词: 转义     协议     转义符    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]