问一下计算机大神。crc16与crc32有什么区别

2024-11-18 17:44:14
推荐回答(2个)
回答(1):

一、生成多项式不同:

1、crc16的生成多项式为:X16+X15+X2+1。

2、crc32的生成多项式为:X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1

二、表示法不同:

1、crc16的的表示法为:0X18005,其对应校验二进制位列为1 1000 0000 0000 0101。

2、crc32的表示法为:0x104C11DB7,CRC32的生成项是: 1 0000 0100 1100 0001 0001 1101 1011 0111  (33个比特) ,颠倒过来,就可以写成1110 1101 1011 1000 1000 0011 0010 0000 1 一般生成项简写时不写最高位的1,故生成项是0x04C11DB7,颠倒后的生成项是0xEDB88320 

CRC32的生成项是33比特,最高位是消掉的,即CRC值是32比特(4个字节),即宽度W=32,就是说,在计算前,原始数据后面要先扩展W=32个比特0,即4个0x00字节。

三、应用不同:

1、crc16应用在 按位计算:程序空间十分苛刻但 CRC 计算速度要求不高的微控制器系统按字节计算:程序空间较大且 CRC 计算速度要求较高的计算机或微控制器系统,半字节计算:程序空间不太大,且 CRC 计算速度又不可以太慢的微控制器系统。

2、crc32应用在 ZIP, RAR,IEEE 802 LAN/FDDI,IEEE 1394,PPP-FCS。

参考资料来源:百度百科-CRC32

参考资料来源:百度百科-CRC

回答(2):

循环冗余码的校验长度不一样。
一般是冗余码越长,数据要求的安全性越高。
根据所要保证数据完整性的数据长短进行选择。

CRC校验具还有自动纠错能力。CRC-12码通常用来传送6-bit字符串;CRC-16及CRC-CCITT码则用是来传送8-bit字符;CRC-32码用于硬盘数据,网络传输等。CRC校验在WinRAR、以太网卡芯片、MPEG解码芯片中有着广泛的应用。

一般情况下,R位生成多项式产生的CRC码可检测出所有的双错、奇数位错和突发长度小于
等于R的突发错以及(1-2-(R-1))的突发长度为R+1的突发错和(1-2-R)的突发长度大于R+1的突发错。例如,对上述R=16的情况,就能检测出100%的突发长度小于等于16的突发错以及99.997%的突发长度为17的突发错和99.998%的突发长度大于17的突发错。这里,突发错误是指几乎是连续发生的一串错,突发长度就是指从出错的第一位到出错的最后一位的长度(中间并不一定每一位都错)。(“16位循环冗余校验码CRC的原理和性能分析”)
CRC校验码计算不同的应用系统,拥有的硬件资源不一样,要求的数据传输速度也不一样。因此可将应用系统分为3类:一是程序存储空间有限,但对CRC计算速度要求不高的微控制系统;二是程序存储空间较大且对CRC计算速度要求较高的计算机或微控制系统;三是程序存储空间不太大,且对CRC计算速度又有一定要求的微控制系统。根据不同的应用系统采取相应的CRC算法,
CRC校验码的生成有按位计算、按字节计算和按半字节计算等方法,