crc - 为什么 CRC 多项式被指定为正态、反转等?

标签 crc

我正在学习 CRC,搜索引擎和 SO 对此一无所知......

为什么我们有“正态”、“逆向”和“倒数”多项式?是喜欢 Big Endian、Little Endian 还是其他什么?

最佳答案

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

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

有时原始硬件的规范是从最低到最高有效处理位,因此您必须使用反射(reflect)版本。

不,这些都不支持小端或大端。两种 CRC 都可以在小端或大端架构中轻松计算。

关于crc - 为什么 CRC 多项式被指定为正态、反转等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41878655/

相关文章:

perl - 如何使用Perl的 'Digest'模块计算CRC?

c++ - Boost CRC问题: different results with the same parameters

c - BCH -CRC 在 C 中的帮助

networking - CRC 突发错误检测校验和结果的证明

delphi - DEC 5.2 CRC-32 检查失败

c# - 在 C 和 C# 之间迁移 CRC 计算

c# - CRC 的生成速度有多快?

java - 如何计算数据的 CRC 并与 zip 条目的 CRC 进行验证?

algorithm - 反转 CRC32

algorithm - 简单的错误检查以替换闪存中的重复代码