CRC校验和使用长(64位)

时间:2012-03-01 14:41:30

标签: c checksum

我检查了CRC64的不同实现。例如,thisthisthis。所有这些的问题是它们使用字节。但是,在64位系统上,我想使用long(8个字节)。通过这种方式,我需要减少迭代次数。例如,对于128字节的数据,使用byte,我需要迭代128次,而使用long,我需要迭代16次。

是否存在使用long或甚至大于一个字节的字大小的CRC64实现?可以修改这些方案吗?

1 个答案:

答案 0 :(得分:13)

CRC计算使用技巧来避免必须逐位处理数据:它使用查找表,允许它一次处理多个位。

一次处理n位需要一个大小为2^n的查找表。您链接的实现一次读取1个字节(8位),实际上它们都使用大小为256 == 2 ^ 8的查找表。

一次处理64位将需要大小为2 ^ 64的查找表,这是不实际的。这就是CRC的常见实现一次处理1个字节的原因。

虽然使用65536条目阵列一次可以处理2个字节,但由于使用了更多的CPU缓存,这可能会对性能产生负面影响。