假设我选择了一个合适的CRC多项式,并且知道我要保护的数据帧的内容和大小...如何选择最佳初始值?
众所周知,初始值为0的CRC对于前导零的消息具有盲点。因此,许多文章和网站都提到/推荐了全为的初始值,因为这可以解决盲点。
我的问题:所有人都有不利之处吗?如果考虑到特定的已知数据帧,是否可以有一个比全数更好的初始值?
答案 0 :(得分:2)
尽管初始化为零的CRC不受前导零的影响,但是如果在传输期间那些前导零中的任何一个由于错误而变为非零,它将检测到错误。它不会捕获的是缩短的消息,其中一些前导零从消息中删除,导致消息缩短了,如果没有单独的长度检查,则可能是一个问题。使用所有这些都会捕获到这样的简短信息。实际上,任何非零的初始CRC都会捕获缩短的消息。所有这些都很方便。一种变化是使用从全为一个的短数据模式生成的CRC作为初始值,例如将16位用作16位CRC的数据来生成初始CRC(这将是一个常数,因此它将是预先计算),相当于将数据全加1位并将CRC初始化为0。