之前的通信一直使用的是CRC校验,只是为了确认数据的正确性,但是由于针对的客户不一样,经常要和客户接口或者换CPU平台,使用CRC校验算法每次都要说很多次才能沟通清楚。
听说CRC校验在特定条件下是可以修复出错的几个位,但是我们平时压根就用不到这么高大上的特性,只是确认一下数据的正确性,出错了就重新传输一下。
在这种情况下我考虑能不能使用计算更简单的校验和取反的方式,这样和客户沟通起来应该就跟容易了。
我的理解是,如果对10个四字节分别计算CRC和校验和的情况下,数据错误但是却通过校验的理论概率就是十分之一,因为10个四字节能表述的范围就是1个四字节的十倍,无论这个校验的四字节是怎么计算出来的,每个校验值都对应着10种数据值。
当然如果是简单的校验和就会有致命的缺陷,那就是如果数据和校验和全是0(总线出错,所有数据全部是0),简单的求和还是0,那么这个数据也会被认为是正确的,但是如果在计算校验和之后将校验和取反,就在一定程度上解决了这个问题。因为总线出问题全是1或者全是0的可能性比较大,其他的出错方式概率就很小了。
所以在不考虑数据出错修复的情况下,CRC和校验和取反的验证效果是不是一样的?
各位怎么看?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>