CRC8和CRC16的计算方法
CRC8转载地址:http://blog.csdn.net/d_leo/article/details/73572373
1.CRC8计算与举例
2.CRC16计算与举例
2.1CRC-16校验码计算方法:
常用查表法和计算法。
计算法一般都是:
(1)、预置1个16位的寄存器为十六进制FFFF(即全为1),称此寄存器为CRC寄存器;
(2)、把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低
8位相异或,把结果放于CRC寄存器,高八位数据不变;
(3)、把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位;
(4)、如果移出位为0:重复第3步(再次右移一位);如果移出位为1,CRC寄存器与多
项式(例如:1010 0000 0000 0001)进行异或;
(5)、重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
(6)、重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;
(7)、将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低
字节进行交换;
(8)、最后得到的CRC寄存器内容即为:CRC码。
以上计算步骤中的多项式A001(1010 0000 0000 0001)是8005按位颠倒后的结果。
查表法:
将移位异或的计算结果做成了一个表,就是将0~256放入一个长度为16位的寄存器中的低八位,高八位填充0,然后将该寄存器与多项式例如:1010 0000 0000 0001)按照上述3、4步骤,直到八位全部移出,最后寄存器中的值就是表格中的数据,高八位、低八位分别单独一个表。
例子:有一16进制只字符串 7E 00 05 60 31 32 33;要在末尾添加两个CRC16校验码 校验这7个16进制字符。注:生成多项式:CRC-CCITT (XModem) CRC16_XMODEM:多项式x16+x12+x5+1(0x1021),初始值0x0000,低位在后,高位在前,结果与0x0000异或.
7E 00 05 60 31 32 33 计算CRC16结果应该是:5B3E 方法如下:
CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算 相同为0,不同为1;0^0=0;0^1=1;1^0=1;1^1=0), 之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。
3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。 4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。 5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。 6.重复第2至第5步直到所有数据全部处理完成。 7.最终CRC寄存器的内容即为CRC值。CRC(16位)多项式为 X16+X15+X2+1,其对应校验二进制位列为1 1000 0000 0000 0101。
CRC16转载地址:https://zhidao.baidu.com/question/242417637.html
2.CRC32计算与举例
CRC8和CRC16的计算方法相关推荐
- CRC基础及CRC8和CRC16的计算方法说明简介
参考链接:https://blog.csdn.net/Chuck_lin/article/details/79199381 https://blog.csdn.net/chen249191508/ar ...
- 查表法的CRC8和CRC16程序
//CRC高位字节值表 const uint8_t auchCRCHi[] = {0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, ...
- 常用crc查表法_CRC校验码简介及CRC16的计算方法
点击上方"嵌入式从0到1",选择"置顶/星标公众号" 干货福利,第一时间送达! 什么是CRC校验? CRC即循环冗余校验码(Cyclic Redundancy ...
- Java版CRC8和CRC16工具类
搞物联应用,通信时常用CRC校验.下面是Java版的CRC算法工具类,可直接使用. CRC8工具类 public class CRC8Util {static byte[] crc8_tab = {( ...
- CRC校验码简介及CRC16的计算方法
[导读]什么是CRC校验?CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.奇偶校验虽然简 ...
- C# CRC8、CRC16校验
一.校验封装到一个类 public class CrcCheck{public static byte CRC8(byte[] buffer){byte crc = 0;for (int j = 1; ...
- 汽车电子嵌入式技术篇(一) -CRC-8和CRC-16算法
1 什么是CRC校验 CRC8校验在整车通信系统中应用比较广泛,相当于以前XOR(异或)的升级版,今天介绍下CRC8的校验算法. 当我们要发送报文信息时,为了避免传输过程的干扰,一般会在8字节的CA ...
- CRC16 - CCITT 计算方法(查表法)| C语言实现
// CRC16_CCITT 计算方法一 unsigned short CRC16_CCITT (unsigned char *pdata, int len) {//初始值 unsigned shor ...
- Redis CRC16校验 1.原理概述
CRC16校验 1.原理概述 来自简书:CRC16算法 来自github.io带图解说:CRC循环冗余校验 来自之乎专栏:CRC-16校验原理与说明 来自简书:CRC16算法 简书摘要: CRC16 ...
最新文章
- linux跨主机复制文件
- 《MySQL数据技术与实验指导》jxgl数据库的创建和插入
- ClickHouse数据分析列式数据库概述
- mysql视频教程siki_siki老师MySQL数据库从零到精通,资源教程下载
- Mybatis生成器插件扩展,生成OR操作
- 程序员的半衰期只有15年?
- phpcmsV9内容页hits点击量 - 调用总结
- 职称计算机excel2015年,2015年职称计算机《Excel2003》最新章节练习题(5)
- 就你赚的那点钱,我们家哪里有能力请护工?
- NBIOT的BC26使用
- PHP navicat数据搭建,navicat怎么建表
- 漫威首部华人英雄电影
- 从vc6.0转到vs2005 2008等出现的错误详解(HYD整理)
- python绘图设置正交坐标等距_python – 使用cartopy在其他项目中绘制投影数据
- knex简单的增删改查
- 几种数据预处理方法汇总(标准/中心化、归一化、正则化)+Python代码
- 心电图心跳信号多分类预测(一)
- 2019.4.4【母亲进入了癫狂状态】
- 【tips】ORM - SQLAlchemy操作MySQL数据库
- W2-D1-linux下文件目录基本操作