首页 16位CRC校验原理与算法分析

16位CRC校验原理与算法分析

举报
开通vip

16位CRC校验原理与算法分析16位CRC校验原理与算法分析 这里,不讨论CRC的纠错原理以及为什么要选下面提及的生成多项式,只是针对以下的生成多项式,如何获得CRC校验码,作一个比较详细的说明。 标准CRC生成多项式如下表, 名称 生成多项式 简记式* 标准引用 CRC-4 x4+x+1 3 ITU G.704 CRC-8 x8+x5+x4+1 0x31 CRC-8 x8+x2+x1+1 0x07 CRC-8 x8+x6+x4+x3+x2+x1 0x5E CRC-12 x12+x11+x3+x+1 80F CRC-16 x1...

16位CRC校验原理与算法分析
16位CRC校验原理与算法分析 这里,不讨论CRC的纠错原理以及为什么要选下面提及的生成多项式,只是针对以下的生成多项式,如何获得CRC校验码,作一个比较详细的说明。 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 CRC生成多项式如下表, 名称 生成多项式 简记式* 标准引用 CRC-4 x4+x+1 3 ITU G.704 CRC-8 x8+x5+x4+1 0x31 CRC-8 x8+x2+x1+1 0x07 CRC-8 x8+x6+x4+x3+x2+x1 0x5E CRC-12 x12+x11+x3+x+1 80F CRC-16 x16+x15+x2+1 8005 IBM SDLC CRC16-CCITT x16+x12+x5+1 1021 ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS CRC-32 x32+x26+x23+...+x2+x+1 04C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS CRC-32c x32+x28+x27+...+x8+x6+1 1EDC6F41 SCTP 生成多项式的最高位固定的1,故在简记式中忽略最高位1了,如0x1021实际是0x11021。 I、基本算法,人工笔算,, 以CRC16-CCITT为例进行说明,CRC校验码为16位,生成多项式17位。假如数据流为4字节,BYTE[3]、BYTE[2]、BYTE[1]、BYTE[0], 数据流左移16位,相当于扩大256×256倍,再除以生成多项式0x11021,做不借位的除法运算,相当于按位异或,,所得的余数就是CRC校验码。 发送时的数据流为6字节,BYTE[3]、BYTE[2]、BYTE[1]、BYTE[0]、CRC[1]、CRC[0], II、计算机算法1,比特型算法,, 1)将扩大后的数据流,6字节,高16位,BYTE[3]、BYTE[2],放入一个长度为16的寄存器, 2)如果寄存器的首位为1,将寄存器左移1位(寄存器的最低位从下一个字节获得),再与生成多项式的简记式异或, 否则仅将寄存器左移1位(寄存器的最低位从下一个字节获得), 3)重复第2步,直到数据流,6字节,全部移入寄存器, 4)寄存器中的值则为CRC校验码CRC[1]、CRC[0]。 III、计算机算法2,字节型算法,,256^n表示256的n次方 把按字节排列的数据流表示成数学多项式,设数据流为BYTE[n]BYTE[n,1]BYTE[n,2]、、、BYTE[1]BYTE[0],表示成数学表达式为BYTE[n]×256^n+BYTE[n-1]×256^(n-1) +...+BYTE[1]*256+BYTE[0],在这里+表示为异或运算。设生成多项式为G17,17bit,,CRC码为CRC16。 则,CRC16,(BYTE[n]×256^n+BYTE[n-1]×256^(n-1)+...+BYTE[1]×256+BYTE[0])×256^2 /G17,即数据流左移16位,再除以生成多项式G17。 先变换BYTE[n-1]、BYTE[n-1]扩大后的形式, CRC16,BYTE[n]×256^n×256^2/G17+BYTE[n-1]×256^(n-1)×256^2/G17+...+BYTE[1]×256×256^2/G17+BYTE[0]×256^2/G17 ,(Z[n]+Y[n]/G17)×256^n+BYTE[n-1]×256^(n-1)×256^2/G17+...+BYTE[1]×256×256^2/G17+BYTE[0]×256^2/G17 ,Z[n]×256^n+{Y[n]×256/G17+BYTE[n-1]×256^2/G17}×256^(n-1)+...+BYTE[1]×256×256^2/G17+BYTE[0]×256^2/G17 ,Z[n]×256^n+{(YH8[n]×256+YHL[n])×256/G17+BYTE[n-1]×256^2/G17}×256^(n-1)+...+BYTE[1]×256×256^2/G17+BYTE[0]×256^2/G17 ,Z[n]×256^n+{YHL[n]×256/G17+(YH8[n]+BYTE[n-1])×256^2/G17}×256^(n-1)+...+BYTE[1]×256×256^2/G17+BYTE[0]×256^2/G17 这样就推导出,BYTE[n-1]字节的CRC校验码为{YHL[n]×256/G17+(YH8[n]+BYTE[n-1])×256^2/G17},即上一字节CRC校验码Y[n]的高8位,YH8[n],与本字节BYTE[n-1]异或, 该结果单独计算CRC校验码,即单字节的16位CRC校验码,对单字节可建立 表格 关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载 ,预先生成对应的16位CRC校验码,,所得的CRC校验码与上一字节CRC校验码Y[n]的低8位,YL8[n], 乘以256,即左移8位,异或。然后依次逐个字节求出CRC,直到BYTE[0]。 字节型算法的一般描述为,本字节的CRC码,等于上一字节CRC码的低8位左移8位,与上一字节CRC右移8位同本字节异或后所得的CRC码异或。 字节型算法如下, 1)CRC寄存器组初始化为全"0"(0x0000)。,注意,CRC寄存器组初始化全为1时,最后CRC应取反。, 2)CRC寄存器组向左移8位,并保存到CRC寄存器组。 3)原CRC寄存器组高8位,右移8位,与数据字节进行异或运算,得出一个指向值表的索引。 4)索引所指的表值与CRC寄存器组做异或运算。 5)数据指针加1,如果数据没有全部处理完,则重复步骤2)。 6)得出CRC。 unsigned short GetCrc_16(unsigned char * pData, int nLength) //函数功能,计算数据流* pData的16位CRC校验码,数据流长度为nLength { unsigned short cRc_16 = 0x0000; // 初始化 while(nLength>0) { cRc_16 = (cRc_16 << 8) ^ cRctable_16[((cRc_16>>8) ^ *pData) & 0xff]; //cRctable_16表由函数mK_cRctable生成 nLength--; pData++; } return cRc_16; } void mK_cRctable(unsigned short gEnpoly) //函数功能,生成0,255对应的16CRC校验码,其实就是计算机算法1,比 特型算法, //gEnpoly为生成多项式 //注意,低位先传送时,生成多项式应反转(低位与高位互换)。如CRC16-CCITT 为0x1021,反转后为0x8408 { unsigned short cRc_16=0; unsigned short i,j,k; for(i=0,k=0;i<256;i++,k++) { cRc_16 = i<<8; for(j=8;j>0;j--) { if(cRc_16&0x8000) //反转时cRc_16&0x0001 cRc_16=(cRc_16<<=1)^gEnpoly; //反转时cRc_16=(cRc_16>>=1)^gEnpoly else cRc_16<<=1; //反转时cRc_16>>=1 //表示的是 cRc_16 = cRc_16<<1; } cRctable_16[k] = cRc_16; } }
本文档为【16位CRC校验原理与算法分析】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_353097
暂无简介~
格式:doc
大小:18KB
软件:Word
页数:0
分类:
上传时间:2017-09-30
浏览量:16