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则只进

你可能感兴趣的:(matlab实现CRC_16)