为什么CRC多项式被指定为正常,反转等?

时间:2017-01-26 16:48:12

标签: crc

我正在学习CRC,搜索引擎和SO在这方面没有任何结果......

为什么我们有“正常”和“反转”和“倒数”多项式?有人喜欢Big Endian,Little Endian或其他什么吗?

1 个答案:

答案 0 :(得分:4)

CRC的经典定义将使用非反射多项式,其将CRC向左移位。如果用于计算的字大小大于CRC,那么最后需要一个操作来清除移入的高位(例如& 0xffff用于16位CRC)。 p>

你可以翻转整个事物,使用反射多项式,然后向右移动而不是向左移动。这给出了相同的CRC属性,但是来自消息的比特从最低到最高有效位有效地操作,而不是从大多数到最低有效位。由于你正在向右移动,无关的位从底部掉落到遗忘中,并且不需要额外的操作。这可能是使用更快更紧凑的实现的早期动机之一。

有时原始硬件的规格是从最低到最重要的位进行处理,因此您必须使用反射版本。

不,这些都不利于小端或大端。在little-endian或big-endian架构中,可以很容易地计算出任何一种CRC。