crc和校验算法

    科技2025-11-29  18

     本算法主要用于通讯数据传输中的数据校验,比如在基于串口的用户协议中,保证通讯的健壮性,就需要加入简单的校验,防止错报或者部分数据丢失。

    主要原理为:发送数据时,在原始数据的末尾加入一个字节,用于存储原始数据的求和的值,当和值大于255时,对255取余。

    数据接收时,计算一包数据除末位之外的和值,对比末尾位数据,以校验数据正确性

    /*********************************************************************************************** *函数名 : sumCrc *函数功能描述 : 数组求和 *函数参数 : data,待求和数组;len,数组长度 *函数返回值 : 求和值 *作者 :layne ***********************************************************************************************/ unsigned char sumCrc(unsigned char *data, unsigned short len) { unsigned short i = 0; unsigned char sum = 0; for(i=0; i < len; i++){ sum += data[i]; } return sum&0xff; } /*********************************************************************************************** *函数名 : sumCrc *函数功能描述 : 数组和校验 *函数参数 : data,待校验数组,最后一位为待校验和值;len,数组长度 *函数返回值 : 求和值 *作者 :layne ***********************************************************************************************/ bool checkCrc(unsigned char *data, unsigned short len) { int i = 0; unsigned char sum = 0; for(i=0;i<len-1;i++){ sum += data[i]; } if(sum != data[len-1]) return TRUE; return FALSE; } /*********************************************************************************************** *函数名 : test_func *函数功能描述 : 测试函数 *函数参数 : *函数返回值 : *作者 :layne ***********************************************************************************************/ void test_func(void) { bool result; unsigned char sum; unsigned char data[] = {0xff, 0x01, 0x00, 0x33, 0x34, 0x68}; sum = sumCrc(data,sizeof(data)-1);//sum == 0x68 ? printf("sum = %d\n",sum); result = checkCrc(data, sizeof(data)); printf("result = %d\n",result); }

     

    Processed: 0.012, SQL: 9