CRC记录

CRC(Cyclic Redundancy Code)中文是“冗余校验码”的意思。CRC32则表示会产生一个32bit(8位十六进制数)的校验值。由于CRC32产生校验值时源数据块的每一个bit(位)都参与了计算,所以数据块中即使只有一位发生了变化,也会得到不同的CRC32值。
CRC32表示使用32位来保存错误检查信息, CRC32的详细信息将嵌入到该文件中,以确保在将该文件还原到磁盘时能够检测到它是否已经损坏。

简而言之,CRC是一个数值。该数值被用于校验数据的正确性。CRC数值简单地说就是通过让需要做处理的数据除以一个常数而得到的余数。
得到这个数值后,将这个数值附加到数据后,当数据被传送到其他地方后,取出原始数据(可能在传送过程中被破坏)与附加的CRC数值,然后将这里的原始数据除以之前那个常数(约定好的)然后得到新的CRC值。比较两个CRC值是否相等即可确认你的数据是否在传送过程中出现错误。
不同长度的常数对应着不同的CRC实现算法。当这个常数为32位时,也就是这里所说的CRC32算法。

所谓的生成多项式,就是上面我所说的常数32。注意,在这里,一个多项式就表示了一个比特流,也就是一堆1、0,组合起来最终就是一个数值。例如CRC32算法中,这个生成多项式为:
c(x) = 1 + x + x^2 + x^4 + x^5 + x^7 + x^8 + x^10 + x^11 + x^12 + x^16 + x^22 + x^23 + x^26 + x^32。
其对应的数字就为:11101101101110001000001100100000。由此可以看出,CRC值也可以看成数据除以一个生成多项式而得到的余数。

那么,除法就为:
1100001010
_______________
10011 ) 11010110110000 附加了几个零的新数据
10011……… 异或操作
—–………
10011……..
10011……..
—–……..
00001……. 逐bit计算
00000…….
—–…….
00010……
00000……
—–……
00101…..
00000…..
—–…..
01011….
00000….
—–….
10110…
10011…
—–…
01010..
00000..
—–..
10100.
10011.
—–.
01110
00000
—–

1110 = 这个余数也就是所谓的CRC值,通常又被称为校验值。


算法都是很常见的异或,关键是要理解原理。CRC就是一个数值。放到文件中供传输前后校验用。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值