非多项式CRC16校验算法
来源:互联网 发布:linux下源码安装mysql 编辑:程序博客网 时间:2024/06/05 10:29
用C语言实现非多项式CRC16校验算法,易于移植:
#define CRC_PRESET 0xffff#define CRC_POLYNOM 0xa001//电量CRC16的多项式#define CRC_SPOLYNOM 0x8408//基站的多项式,最后使用基站CRC校验码#define CRCGEN 0x1021//CRC16的多项式/********************************************************************************函数名称:calculate_crc16*入口参数:数据长度,数据头指针*出口参数:返回16位的校验值*功能说明:可以对数组范围内前任意长度的数据进行校验********************************************************************************/u16 calculate_crc16( volatile u8 *checksource, u8 length){ unsigned char verifyi,verifyj;unsigned short verifynum = CRC_PRESET; for (verifyi=0;verifyi<length;verifyi++) { verifynum^=*checksource; for (verifyj=0;verifyj<8;verifyj++) { if (verifynum&0x0001) verifynum=(verifynum>>1)^CRC_SPOLYNOM;//CRC多项式 else verifynum=(verifynum>>1) ; } checksource++; } return verifynum;}/********************************************************************************函数名称:calculate_crc16*入口参数:数据长度,数据头指针*出口参数:返回16位的校验值*功能说明:针对区控协议(最后2个byte为crc值)的一个校验,length为数据包总长度*******************************************************************************/bool check_crc(volatile u8 *checksource,u8 length) { u16 pri_crc,calcu_crc; pri_crc = ((u16)(checksource[length-2])<<8) +(u16)(checksource[length-1]); calcu_crc= calculate_crc16(checksource,length-2); if(pri_crc ==calcu_crc) return true; else return false;}//调用examplevoid add_device(){ bool crc16_res; volatile u8 add_cmd1[10] = {0x02,0x00,0x04/*RSIIU_ID*/,0xc7,0x03/* data length*/,\ 0x05/*port*/,0x10,0x11/*id*/,0x94,0x0d}; volatile u8 add_cmd2[18] = {0x02,0x00,0x04/*RSIIU_ID*/,0xc8,0x0b/*data length*/,\ 0x00/*type*/,0x06/*port*/,0x10,0x11,0x01,0xc2,0x00/*baud*/,\ 0xc0,0xa8,0x00,0x64/*ip*/,0x38,0xd8}; crc16_res = check_crc(add_cmd1,10); fprintf(cgiOut, "<p> %x \n",crc16_res); crc16_res = check_crc(add_cmd2,18); fprintf(cgiOut, "<p> %x \n",crc16_res); }</span>
0 0
- 非多项式CRC16校验算法
- CRC16校验算法实现
- CRC16校验算法实现
- CRC16校验算法实现
- CRC16校验算法
- Java CRC16算法校验
- CRC16 校验算法
- CRC16校验算法程序
- CRC16校验算法实现
- CRC16循环冗余校验算法
- 一种设备的CRC16校验算法
- CRC16校验算法的Java实现
- CRC16 校验
- CRC16校验
- CRC16校验
- CRC16校验
- CRC16校验
- CRC16校验
- 【shell】【10】文件处理
- CodeForces 34D Road Map
- HDU1039 Easier Done Than Said?
- s3c2440 的 rtc 操作
- 堆
- 非多项式CRC16校验算法
- UVa 348 Optimal Array Multiplication Sequence (DP 最优矩阵链乘)
- linux shell
- The Python Conceptual Hierarchy
- xcode6 beta6.dmg 下载地址
- C语言位运算符
- 编写简单的网络爬虫 (python3.2)
- 欢迎光临我的博客
- ios构造httpPost头结构