CRC检校原理:
CRC检校极为循环冗余检校码,是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的信道编码技术,主要用于检验在数据传输,接受或者保存过程中是否出现缺失或者错误。
CRC计算过程:
采用CRC生成的多项式,对接受的二进制数据流中除24位的crc检校码外的数据进行求余计算,通过检查计算出的余数与数据流中的CRC检校码是否相同来判度数据文件是否正确。
RTKLIB中CRC-24Q检校代码:
crc = ((crc << 8) & 0xFFFFFF) ^ tbl_CRC24Q[(crc >> 16) ^ buff[i]];
其中,crc << 8表示将32位的crc左移8位,低位补0。(crc << 8) & 0xFFFFFF表示只取移位后从低位开始的24位,即从左到右24位。crc >> 16表示将crc右移16位。(crc >> 16) ^ buff[i]表示对移位后的数据与buff[i]中的八位进行按位异或运算,然后根据计算结果n选取tbl_CRC24Q数组中的第n个数在与(crc << 8) & 0xFFFFFF进行按位异或运算。
注:tbl_CRC24Q数组每八位二进制数组(即0-255的二进制表示)除以相应校验多项式后的余数表。
注:
<<:左移运算,a<<m,将a按二进制位向左移动m位,高位移除后,低位补0。
>>:右移运算,a>>m,将a按二进制位向右移动m位,低位移除后,高位补0。
^ :按位异或运算,二进制逐位非或,从最小(及最右)的位开始,对操作位数逐位操作,相同 为0,不同为1。例如:X:0000 1011 1111 Y:1111 0101 1111 X^Y:1111 1110 0000。