我正在学习 CRC,搜索引擎和 SO 对此一无所知......
为什么我们有“正态”、“逆向”和“倒数”多项式?是喜欢 Big Endian、Little Endian 还是其他什么?
最佳答案
CRC 的经典定义将使用非反射多项式,它将 CRC 左移。如果用于计算的字长大于 CRC,那么您需要在最后执行一个操作来清除移入的高位(例如 & 0xffff
用于 16 位 CRC)。
您可以翻转整个事物,使用反射多项式,然后向右移动而不是向左移动。这给出了相同的 CRC 属性,但消息中的位是从最低到最高有效位,而不是最高到最低有效位进行有效操作。由于您正在右移,多余的位会从底部掉落到被遗忘的地方,并且不需要额外的操作。这可能是使用稍微快一点和更紧凑的实现的早期动机之一。
有时原始硬件的规范是从最低到最高有效处理位,因此您必须使用反射(reflect)版本。
不,这些都不支持小端或大端。两种 CRC 都可以在小端或大端架构中轻松计算。
关于crc - 为什么 CRC 多项式被指定为正态、反转等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41878655/