循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。
uint16_t calcul_crc(uint8_t *data, uint32_t length)
{
uint16_t crc;
uint16_t carry_flag;
uint32_t i;
uint16_t j;
crc = 0xffff;
for (i = 0; i < length; i++) {
crc ^= data[i];
for (j = 0; j < 8; j++) {
carry_flag = crc & 0x0001;
crc >>= 1;
if (carry_flag == 1)
crc ^= 0xa001;
}
}
return crc;
}