matlab实现CRC_16,关于CRC校验实现程序解释(CRC16为例)

本文本文主要说两件事,一是对于网上一些Demo的解释,借用网友思路的Demo,如有雷同纯属巧合。二是关于数据反转的问题。

在《CRC原理——为什么算出来的CRC校验码结果总不一样?》原文链接(https://www.jianshu.com/p/2551ea7dbb14)中解释了关于CRC的一些基本概念,这里谈谈通过高级语言编程的实现思路。

CRC的实现步骤(以crc16为例,宽度为16位):

(1)确定模型标准

(2)将待发送数据与预定初始值进行异或得到新的数据M

(2)在M后面(右侧)加上16个0得到数据N

(3)将N与模型标准除数进行异或,得到余数

(4)将余数与结果异或值进行异或,得到目标值

这里不含输入输出值的正反转。我们很容易会发现一些问题,当所处理的数据量不大时,这样的方法是没有问题的,但实际上我们一般传递的数据都是非常巨大的,如果通过上述方案,恐怕计算机的空间都不够我们使用的,所以我们需要用另一种方法,这里引用网友的思路(不知道谁的,仅适用于常用的8位数据传输,校验宽度为16位,无反转):

(1)预制一个16位的存储空间CRC,并赋初始值

(2)将要发送的数据打包成一个Byte数组(将数据分成多个Byte存储)

(3)将第一个数据左移8位并与CRC当前值进行异或,结果放入CRC

(4)判断当前CRC的最高位(MSB)是否为1,若为1,则左移一位,将MSB移出,并在LSB(最低位)补0,将新的数据与简记式Poly进行异或,结果存入CRC;

若MSB为0则只进

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值