hdlc协议解码的四种方法

2023-10-26

hdlc协议规定了,在hdlc中不能出现连续的6个1,因为这是hdlc帧的分割标志,因此在编码的时候每遇到5个连续的1就插入0,因此解码时就需要碰到5个连续的1就要去掉后面的0,而在我们的计算机中都是以整数字节描述信息,因此造成了用pc解hdlc的不便。

第一种,使用最原始的方法:将二进制比特流变成字符串的‘0’‘1’序列,然后在这个基础上解码。这种方法采用的是一个字节表示原来的一位,因此直观感最强,适合初学者编写。缺点是要经过两次变换:先将二进制流变成字符串,解码之后再将字符串变成比特流,经过这两次变换导致程序解码速度低,不过如果只是面对一个E1或T1的数据,这种解码方法基本上可以跟得上处理。


第二种,按照比特流处理,将每个字节的位用移位或者用与的方式取得之后,和之前的1的个数计数比较是否为5个1了,然后继续处理,将结果用或的方式记入结果数组中。和上一种方法相比不用进行两次变换,提高了处理速度。但是需要频繁的移位处理,拖累了处理速度。


第三种,使用查表的方法。先构造处理表:用两个字节表示,处理表就有64K大小,这个处理表记录每种方式的编码可以将多少位的编码直接记入到结果数组中。由于每次处理的平均长度为1个字节,而且没有频繁的移位处理,因此这种方法的处理速度最快,在P4 2.4G的机器上能够达到50MB/s。这种方法的缺点在于处理表的大小过大,在处理时,CPU可能需要频繁的跟换内存页,从而导致速度慢。


第四种,按照一个字节构造处理表,处理表大小只有8*256项了,每个表项要记录该字节首尾分别的连续1的个数以及解码的编码及位数,这种解法使用恰当的时候在P4 2.4G的机器上能够达到100MB/s。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hdlc协议解码的四种方法 的相关文章

  • C++复合模式:Compound Pattern

    模式通常被一起使用 并被组合在同一个设计解决方案中 复合模式在一个解决方案中结合两个或多个模式 以解决一般或重复发生的问题 注 是为了解决一般或重复发生的问题 而不是简单的认为使用了多个模式就是复合模式 绝不要为了使用模式而使用模式 具体问
  • 基于 Flask 的简易 Mock 平台

    https testerhome com topics 14753
  • Linux——md5命令

    文章目录 介绍 选项 使用案例 生成文件md5值 文本模式或二进制模式 md5值重定向 重定向追加 md5校验 实际开发场景 介绍 md5sum命令用于生成和校验文件的md5值 它会逐位对文件的内容进行校验 是文件的内容 与文件名无关 也就
  • KEIL软件中编译时出现的Error L6200E: symbol multiply defined ...的解决方法

    今天在编程的时候遇到了这个问题 在网上查找了好多办法 都没有什么效果通过ctrl f 发现自己并没有重新定义 而且这两个 c文件都是移植且可以用的 然后我就准备一点一点的删mian c中的内容 看看是哪的问题 当我删掉 include lc
  • 前后端时间比较大小

    前端 this createdTime response createdTime 获取到时间的值 const onLineDate 2023 04 11 23 00 00 if moment this createdTime gt mome
  • JAVA整理总结

    文章目录 JavaSE 面向对象的特点是什么 和equals的区别 String str i 与 String str new String i 一样吗 String 类的常用方法都有那些 Integer a 127 与 Integer b
  • 去除json解析后字符串中的双引号

    const jsonString c 1691715434770 e 253402300799000 v admin const parsedObject JSON parse jsonString 去掉双引号 const valueWit

随机推荐