关于CRC校验的一些总结
1、CRC校验的原理
模二除法,除数根据多项式不同有很多种,CRC8,CRC16,CRC32,即使同样的CRC8还有几种不同的除数。
上述模二除法说到底就是一种异或操作,如何操作,请参考他人的视频:
[CRC校验]手算与直观演示
[CRC校验]手算与直观演示该视频就是用异或的方式实现模二除法。
知道了原理,如何编程呢,如果按照视频里的描述,如果我有一个10个字节长度的数据,与8位除数进行crc校验,岂不是要将所有数据串起来成为一个特别长的数据 unsigned int80, 不是的。
2、原理了解了,再来看如何编程,
简而言之,先计算第一个字节的crc结果,然后把第一个字节的crc结果与第二个字节进行异或, 异或后的值再进行一次crc计算就可以了,多个字节也是反复这过程就好。
3、计算量来讲,每个字节数据要进行8次移位或者移位+异或(CRC8, CRC16,CRC32都是如此),之后前一个字节的crc结果再与后一个字节数据再进行异或,数据计算量不小。因此,可以采用查表法,查表法可以将每个字节与除数的crc计算通过一次查表完成,可以节省大量计算。对于CRC8表的大小是256byte,CRC16是512byte,不是256*256个byte,个人推断CRC32应该需要256*4个byte就够了。
4、CRC出错的概率
必须说明的是CRC不能百分百保证通过校验的数据都是可靠的,有一定的出错的概率。一般情况下,可以认为出错概率CRC8>CRC16>CRC32,可见容易计算的,往往可靠性也是最低的。
如果不是特别在乎出错的概率,我认为累加和校验则是一种性价比很高的校验方式,计算简单,纠错能力不比crc8校验差太多。
下一篇:
JanusGraph的安装及使用