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 ...
最新文章
- 优达学城《DeepLearning》2-3:权重初始化
- 分布式版本控制工具:git与Mercurial(zz)
- php数据库滚动文字_PHP 里用的文字左右滚动?
- Linux设备驱动程序 第三版 读书笔记(一)
- Docker之Dockerfile详解
- python对比图片
- python 利用递归求阶乘
- freebsd下安装php-intl扩展
- CSDN博文分类全部删除了?
- 点云入门笔记(一):点云数据及获取
- RESTful 接口设计规范
- redis3.0源码学习之可持久化化操作
- matlab曲线拟合
- 华硕服务器怎么装系统教程,买了华硕电脑不会装系统?教你简单快速的系统重装教程...
- getStyle(getComputedStyle currentstyle) 获取非行间样式函数封装
- 工作后的5种放松方法
- h5课件制作_一款专业的HTML5课件制作工具:炫课
- mp3计算机无法识别,MP3\MP4连接windows电脑后无法识别怎么办
- 网易易盾——推理拼图验证码参数逆向分析和调用
- 002概率论基本公式
热门文章
- EBS Form开发中LOV实现实例(3)
- 转:Web 2.0时代必读的24本经典书籍
- 基于JAVA企业进销管理系统的设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署
- (15)tensorflow全连接层的张量实现
- [导入]MAGIC CYNDI魔幻心凌
- 安全运维 | Linux系统基线检查
- 高德地图——查询天气
- 网络通信协议-TCP协议
- Jenkins 流水线 获取git 分支列表_DevOps流水线实践教程|端到端研发效能提升
- linux 安装rar