首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于CRC的原理与代码婚配

2012-10-18 
关于CRC的原理与代码匹配CRC的计算有多种方法,基本原理就是在待计算的源串后加上多项式位宽长度的0比如:待

关于CRC的原理与代码匹配
CRC的计算有多种方法,基本原理就是在待计算的源串后加上多项式位宽长度的0
比如:待计算的源串为1101 0010 1100 1001,多项式为1101,其位宽为3,
我们用1101 0010 1100 1001 000除以1101所得的余数就是我们想要的CRC值,在进行除法时,实际是异或运算。
也就是我们不停的进行异或,移位就可以得出CRC值。

下面这一段代码是计算CRC16的,多项式为0x1021,这段代码是没有问题,我用查表法计算相同的源串,得出的CRC值
是一样的,我敢保证查表法是正确的。对于这段代码,根据原理,我有几个疑问,希望大伙帮忙分析下,也希望大伙能
对这段代码和原理进行对照解读。
uint crc16l(uCHAR *ptr,uCHAR len) // ptr 为数据指针,len 为数据长度
{
uCHAR i;
while(len--)
{
for(i=0x80; i!=0; i>>=1)
{
if((crc&0x8000)!=0) {crc<<=1; crc^=0x1021;} 
else crc<<=1; 
if((*ptr&i)!=0) crc^=0x1021; 
}
ptr++;
}
return(crc);
}

问题:
1,既然是在源串的后面补上与多项式位宽相同的0,这段代码在哪里体现出来的?我们给定计算的字符串是没有加多项式位宽个0的。
2,ptr是给定的源串,这个函数里只有“if((*ptr&i)!=0)”用到了源串,而且还是一个判断,也就是说源串并没有参与CRC的计算,而原理说得很明确,用源串去除多项式,这个该如何解释?

另外的问题:
对于查表法,这里只以CRC16讨论,为什么计算出的表是256项?查表法的依据是什么,就是查表法的原理?
在网上找了一些资料,但是没有找到自己想要的答案,希望大家能够给予解答,把CRC彻底整明白。

我的分不多,但是还是希望大家能积极参与,搞定CRC。谢谢了^_^

[解决办法]
函数里面crc的初值是?
[解决办法]
http://wissup.download.csdn.net/,这里有下载的pdf文档,推荐LZ看看!介绍了程序怎么来的!

热点排行