首页 > 代码库 > 循环校验码
循环校验码
程序:
// 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); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。