CRC算法
来源:互联网 发布:skype6.6mac官方下载 编辑:程序博客网 时间:2024/05/17 08:30
一、CRC-16校验码计算方法:
常用查表法和计算法。计算方法一般都是:
(1)、预置1个16位的寄存器为十六进制FFFF(即全为1),称此寄存器为CRC寄存器;
(2)、把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低8位相异或,把结果放于CRC寄存器,高八位数据不变;
(3)、把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位;
(4)、如果移出位为0:重复第3步(再次右移一位);如果移出位为1,CRC寄存器与多
项式A001(1010 0000 0000 0001)进行异或;
(5)、重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
(6)、重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;
(7)、将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低
字节进行交换;
(8)、最后得到的CRC寄存器内容即为:CRC码。
以上计算步骤中的多项式A001是8005按位颠倒后的结果。
二、代码
u16 CRCCheck(u8 *buf,u16 count){ u16 crc = 0xFFFF; u16 i,j; for (i =0; i < count; i++) { crc=crc^buf[i]; for (j = 1; j <= 8; j++) { if ((crc & 0x0001) == 1) { crc = (uint16_t)(crc >> 1); crc = (uint16_t)(crc ^ 0xA001); } else { crc = (uint16_t)(crc >> 1); } } } return crc;}
三、示例
void Pump_Start(void){ char param[100]={0}; u16 check=0; param[0]=0x01; param[1]=0x10;// param[2]=0x00;// param[3]=0x00;// param[4]=0x00;// param[5]=0x01;// param[6]=0x02;// param[7]=0xFF;// param[8]=0x00;// check=CRCCheck((u8*)param,9); param[9]=(check & 0xFF); param[10]=(check & 0xFF00)>>8; Pump_SendData((u8*)param,11);}
阅读全文
0 0
- CRC算法
- CRC算法
- CRC算法
- CRC算法
- crc 算法
- CRC算法
- CRC算法
- CRC算法
- CRC算法
- CRC算法
- CRC算法
- CRC算法
- CRC算法介绍
- CRC算法另类应用
- CRC算法与实现
- CRC算法的实现...
- CRC算法与实现
- CRC算法与实现
- Qt 5.6.1 + vs2013 加载自己编写的静态链接库
- 指针笔记
- 日活、周活(周重活)、月活 统计
- 切换标题栏文字颜色
- 在64位windows7下CMD命令安装python与Flask
- CRC算法
- cv::Mat类型转为CImage,MFC传入窗口句柄显示CImage图片
- 连接池技术
- 01背包及完全背包问题(51Nod
- 首席架构师眼里的架构本质
- postman下载
- 使用PHP在Dreamweaver下实现用户信息查询
- 堆排序
- 最近用vc重写了xampp控制面板