文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

7E头解析的那些事儿(帧格式分析实例)

2024-12-02 18:47

关注

除此之外还有HDLC、PPP等协议也会到有此应用场景。

那么如何从这些数据帧中提取有效数据呢?

本文通过一个简单的实例给大家详细讲述如何从帧中提取有效的协议信令。

1. 帧格式要求

首先我们明确下帧提取的一些要求:

(1)把信息字段中出现的每一个0x7E字节转变为2字节序列(0x7D,0x5E)。

(2)若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把转义字符0x7D转变为2字节序列(0x7D,0x5D)。

举例:一个PPP帧的数据部分:

  1. 7D 5E FE 27 7D 5D 7D 5D 65 7D 5E 

那么实际上真正的数据是

  1. 7E FE 27 7D 7D 65 

转换图解:

同样的,如果要发送数据,则反过来。

2. 设计

比如:我们从底层收上来的原始数据帧格式如下:

那么我们要能够提取两个7e之间的协议数据帧,同时还原帧中的所有的7e。

很显然我们希望最终解析后结果如下:

  1. 7e 0f 0e 30 27 1c 00 27 1c 01 27 1c 02 7e 00 29 7e  
  2. 7e 11 73 7e  
  3. 7e 00 27 1c 01 27 1c 02 7e 00 29 7e  

帧解析详细设计流程图

3.代码

不上代码的就是耍流氓

首先看下如果下发数据帧,如何将所有的7e和7d做替换:函数hdlc_send(char * data,UINT8 len)实现如下:

int hdlc_rcv_frm(UINT8 *data,int len)实现如下

测试代码如下:

  1. int main() 
  2.  int len; 
  3.   
  4.  char data1[6]={0x7e,0xf,0xe,0x30,0x27,0x1c};  
  5.  char data2[6]={0x0,0x27,0x1c,0x1,0x27,0x1c}; 
  6.  char data3[8]={0x2,0x7d,0x5e,0x0,0x29,0x7e,0x0,0x7e}; 
  7.  char data4[6]={0x11,0x73,0x7e,0x30,0x27,0x7e};  
  8.  char data5[6]={0x0,0x27,0x1c,0x1,0x27,0x1c}; 
  9.  char data6[6]={0x2,0x7d,0x5e,0x0,0x29,0x7e};  
  10.  
  11. #if 0 
  12.  printf("************测试hdlc_send()******************\n"); 
  13.  
  14.  len = hdlc_send(data1,6); 
  15.  
  16.  printf("********************end**********************\n\n"); 
  17. #endif 
  18.  printf("\n************测试hdlc_rcv_frm()******************\n"); 
  19.  hdlc_rcv_frm(data1,6); 
  20.  hdlc_rcv_frm(data2,6); 
  21.  hdlc_rcv_frm(data3,8); 
  22.   
  23.  hdlc_rcv_frm(data4,6); 
  24.  hdlc_rcv_frm(data5,6); 
  25.  hdlc_rcv_frm(data6,6); 
  26.  printf("********************end**************************\n"); 
  27. 运行结果如下: 

运行结果如下:

注意

本代码仍然有一些bug,暂时没有修改,所以实际项目慎用。小心数组越界啊!

完整代码链接:

链接:https://pan.baidu.com/s/1rPEDC3erLpPRH0OnkfNH_A

提取码:wzxq

 

来源: 一口Linux内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯