最近接触到了crc校验,特此记录:
首先总结了几个公式 :
crc(a^b) = crc(a)^crc(b); (1)
crc(0xA0) = (crc(0xA)<<4)^crc(crc(0xA)>>4) (2)
由(1)(2)推:
crc(0xAB) = crc(0xA0^0xB)= crc(0xA0)^crc(0xB)
= (crc(0xA)<<4)^crc(crc(0xA)>>4) ^ crc(0XB)
=(crc(0xA)<<4)^crc((crc(0xA)>>4)^0xB) (3)
不难发现,crc(0xA)可以用一个容量为16的数组存储起来,可节约大量算力,16个字节的储存空间对单片机来说也很小;使用公式(3)可以写出一个较为快速的crc校验。