选择理想的CRC初值

Choose an ideal CRC initial value

假设我已经选择了一个合适的CRC多项式,并且知道我要保护的数据帧的内容和大小......我该如何选择最优的初始值?

众所周知,初始值为 0 的 CRC 对于前导零的消息有一个盲点。出于这个原因,许多文章和网站提到/推荐全一的初始值,因为这修复了盲点。

我的问题:全一有什么缺点吗?如果考虑特定的已知数据框,是否有比全一更好的初始值?

虽然初始化为零的 CRC 不受前导零的影响,但如果在传输过程中任何前导零由于错误而变为非零,它将检测到错误。它不会捕获的是一条缩短的消息,其中一些前导零从消息中删除,导致消息缩短,如果没有单独的长度检查,这可能是一个问题。使用所有的将捕捉到这样一个缩短的消息。实际上,任何非零初始 CRC 都会捕捉到一条缩短的消息。所有的都很方便。一种变体是使用从全 1 的短数据模式生成的 CRC 作为初始值,例如 16 个 1 位用作 16 位 CRC 的数据以生成初始 CRC(这将是一个常数,因此它将是提前计算),这相当于在数据前加上所有 1 位并将 CRC 初始化为 0。