1 / 6
文档名称:

CRC校验C语言实现.docx

格式:docx   大小:16KB   页数:6页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

CRC校验C语言实现.docx

上传人:小s 2021/6/23 文件大小:16 KB

下载得到文件列表

CRC校验C语言实现.docx

文档介绍

文档介绍:原创——CRC校验C语言实现,
CRC(Cyclic Redundancy Check)校验应用较为广泛,以前为了处理简单,在程序中人多数采用 LRC(Longitudinal Redundancy Check)校验,LRC校验很好珅解,编程实现简单用了一大时间研究了 CRC 的C语言实现,理解和掌握了基本原理和C语言编程。结合自己的理解简单写下來。
1、CRC简介
CRC检验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以 淀的规则 产生一个检验码r位(就是CRC码),附在伫息后面,构成 个新的二进制码序列数共(k+r)位,最后发送出氏 接收端根据同样的规则校验,以确定传送中是否出错。接收端冇两种处理方式:1、计算k位序列的CRC码, 与接收到的CRC比较,一致则接收正确。2、计算整个k+r位的CRC码,若为0,则接收正确。
CRC码有多种检验位数,8位、16位、32位等,原理和同。16位的CRC码产生的观则是先将要发送 的一•进制序列数左移16位(I!卩乘以2的16次方后),除以-•个多项式,最厉所得到的余数就是CRC码。
求CRC码所采用的是模2运算法则,即多项式除法中采用不带借位的减法运算,运算等同J:界或运算。 这一点要仔细理解,是编程的基础。
CRC-16:(美国二进制同步系统屮采用) G(X) = X16 + X15 + X2+ 1
CRC-CCITT:(由欧洲 CCITT 推荐) G(X) = X16 + X12 + X5 + 1
CRC-32: G(X) = X32 + X26 + X23 + X22 + X16+X12 + X11 +X10 + X8 + X7 + X5 + X4 + X2 + XI + 1
2、按位计算CRC
采用CRC-CCITT多项式,多项式为0x11021, C语言编程时,参与计算为0x1021,这个地方得深入思 考才能体会貝冲的奥妙,分享一卜我的思路:”按位计算CRC时,例如计算二进制序列为1001 1010 1010 1111 时,将二进制序列数左移16位,即为1001 1010 1010 1111 (0000 0000 0000 0000),实际上该二迓制序列对拆 分为]000 0000 0000 0000 (0000 0000 0000 0000) + 000 0000 0000 0000 (0000 0000 0000 0000) + 00 0000 0000 0000 (0000 0000 0000 0000) + 1 0000 0000 0000 (0000 0000 0000 0000) +
现在开始分析运算:
vl>对第一个二进制分序列求余数,竖式除法即为0X10000人0x11021运算,后而的0位保留;
<2>接着对第二个二进制分序列求余数,将第一步运算的余数*2后再和第二个二进制分序列-•起对 0x11021求余,这一步理解应该没什么问题。如果该分序列为0,无需计算。
v3>对其余的二进制序列求余与上面两步相同。
v4>计算到最后一位时即为整个二进制序列的余数,即为CRC校验码。
该计算方法相当于对每一位计算,运算过程很容易理解,所占内存少,缺点是一位一位计算比较耗时。 下面给出C语言实现方法:
unsigned char t