标签:算法
程序:
// X16+X12+X5+1 : 1,0001,0000,0010,0001 :0x11021 unsigned char crcbuff [] = { 0x00,0x00,0x00,0x00,0x06,0x0d,0xd2,0xe3}; unsigned int crc; // CRC 码 void main(void) { unsigned char *ptr; crc = 0; // CRC 初值 ptr = crcbuff; // 指向第一个 Byte 数据0x11021 crc = crc16l(ptr,8); while(1); } /** * @brief CRC16CTTTL的校验 * @note 十六进制:0x11021 * 二 进 制:0B10001000000100001 * 多 项 式:X16+X12+X5+1 */ // unsigned int crc; // CRC 码 unsigned int crc16l(unsigned char *ptr,unsigned char len) // ptr 为数据指针,len 为数据长度 { unsigned char i; while(len--) { for(i = 0x80; i!=0; i>>=1) { if((crc & 0x8000) !=0 ) // 判断第16位是不是 = 1 { crc <<= 1; crc ^= 0x1021; // 1-1 }else { crc <<= 1; // 1-2 } if((*ptr & i) != 0) // 判断第16位是不是 = 1 { crc ^= 0x1021; // 1-3(异或运算) } } ptr++; } return(crc); }
标签:算法
原文地址:http://blog.csdn.net/linux_lv/article/details/38226369