1 / 4
文档名称:

CRC校验C语言实现.docx

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

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

分享

预览

CRC校验C语言实现.docx

上传人:飞行的笑笑 2023/1/11 文件大小:13 KB

下载得到文件列表

CRC校验C语言实现.docx

相关文档

文档介绍

文档介绍:该【CRC校验C语言实现 】是由【飞行的笑笑】上传分享,文档一共【4】页,该文档可以免费在线阅读,需要了解更多关于【CRC校验C语言实现 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。CRC校验C语言实现
CRC校验C语言实现
CRC校验C语言实现,转载请注明出处,感谢
CRC(CyclicRedundancyCheck)校验应用较为宽泛,从前为
了办理简单,在程序中大部分采纳LRC(LongitudinalRedundancy
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
位(即乘以2的16次方后),除以一个多项式,最后所获得的余
数就是CRC码。
求CRC码所采纳的是模2运算法例,即多项式除法中采纳不带借位的减法运算,运算等同于异或运算。这一点要认真理解,是编程的基础。
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+X1+12、按位计算CRC
采纳CRC-CCITT多项式,多项式为0x*****,C语言编程时,
参加计算为0x1021,这个地方得深入思虑才能领会此中的奇妙,
分享一下我的思路:当按位计算

CRC

时,比如计算二进制序列
为*****

时,将二进制序列数左移

16位,即为*****(*****)

,实质
上该二进制序列可拆分为*****(*****)+000000000000000
(*****)+00000000000000(*****)+1000000000000(*****)
此刻开始剖析运算:
1对第一个二进制分序列求余数,竖式除法即为0x*****^0x*****运算,后边的0位保存;
接着对第二个二进制分序列求余数,将第一步运算的余数
*2后再和第二个二进制分序列一同对0x*****求余,这一步理解
应当没什么问题。假如该分序列为0,无需计算。3对其他的二
进制序列求余与上边两步相同。
4计算到最后一位时即为整个二进制序列的余数,即为CRC
校验码。
该计算方法相当于对每一位计算,运算过程很简单理解,所
占内存少,弊端是一位一位计算比较耗时。
下边给出C语言实现方法:
unsignedchartest={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff};
unsignedcharlen=16;
voidmain(void)
{
unsignedlongtemp=0;
unsignedintcrc;
unsignedchari;
unsignedchar*ptr=test;
while(len--)
{
for(i=0x80;i!=0;i=i1)
{
temp=temp*2;
if((temp0x*****)!=0)
{
temp=temp^0x*****;
}
if((*ptri)!=0)
{
temp=temp^(0x*****^0x*****);