CRC校验码计算示例:
现假设选择的 CRC生成多项式为 G( X) = X4 + X3 + 1,要求出二进制序列 10110011的 CRC校验码。下面是具体的计算过程 :
①将多项式转化为二进制序列,由 G( X) = X4 + X3 + 1可知二进制一种有五位,第4位、第三位和第零位分别为1,则序列为11001
②多项式的位数位5,则在数据帧的后面加上5-1位0,数据帧变为 101100110000,然后使用模2除法除以除数 11001,得到余数。

③将计算出来的CRC校验码添加在原始帧的后面,真正的数据帧为101100110100,再把这个数据帧发送到接收端。

④接收端收到数据帧后,用上面选定的除数,用模2除法除去,验证余数是否为0,如果为0,则说明数据帧没有出错。

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按位颠倒后的结果。

public UInt16  CRC16(byte[] data, UInt16 Length)
{UInt16  i, j, Bit; UInt32   CRC0 = 0xffff;//预置1个16位的寄存器为十六进制FFFF(即全为1),称此寄存器为CRC寄存器for(i=0; i<Length; i++){  CRC0=CRC0^data[i];//把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低8位相异或,把结果放于CRC寄存器,高八位数据不变for(j=0; j<8; j++){Bit = (UInt16)(CRC0 & 0x0001);CRC0 = CRC0 >> 1;//把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位if(Bit == 1) //  如果移出位为0:重复第3步(再次右移一位);如果移出位为1,CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;CRC0 = CRC0^0xA001;}重复,直到右移8次,这样整个8位数据全部进行了处理}return (UInt16)CRC0;
}

参考:(3条消息) CRC校验原理及步骤_D_leo的博客-CSDN博客_crc校验

(3条消息) CRC16 校验算法_oshan2012的博客-CSDN博客

怎么计算crc16校验数据的校验码 - 程序员大本营 (pianshen.com)

CRC校验笔记 C语言代码分析相关推荐

  1. CRC校验码生成逻辑的实现原理详解——结合C语言和Verilog语言代码分析

    文章目录 前言 一.CRC校验码的计算 1.CRC模型 2.CRC计算 步骤1:输入数据与初始值模2加并左移 步骤2:被除数与多项式模2除 二.CRC校验码生成逻辑的C语言实现 1.实现代码 2.代码 ...

  2. CRC校验及C语言实现

    摘自:CRC校验原理及其C语言实现 地址:https://blog.csdn.net/whik1194/article/details/108837493?spm=1001.2014.3001.550 ...

  3. MPEG音频编码 基本原理和C语言代码分析

    背景 MPEG(Moving Picture Experts Group)在汉语中译为活动图像专家组,特指活动影音压缩标准. MPEG 音频文件是MPEG1 标准中的声音部分,也叫MPEG 音频层,它 ...

  4. linux内核笔记之SMMU代码分析

    2020/06/10: first version, 主要介绍smmu驱动的初始化流程 在前一篇博文ARM SMMU学习笔记中, 介绍了SMMU的一些基本概念以及SMMU地址转换的基本流程,本文主要分 ...

  5. [技术栈]CRC校验原理及C#代码实现CRC16、CRC32计算FCS校验码

    1.CRC.FCS是什么 比奇小说网 https://m.biqi.org/ CRC,全称Cyclic Redundancy Check,中文名称为循环冗余校验,是一种根据网络数据包或计算机文件等数据 ...

  6. 详述CRC校验码(附代码)

    关注+星标公众号,不错过精彩内容 来源 | 一口Linux CRC校验应用比较广泛,通常在通信领域用的比较多,即便是自定义通信协议,也可以添加CRC校验码,使其通信更加可靠. 今天就来进一步描述CRC ...

  7. crc校验算法程序c语言实现,CRC校验的快速算法的C语言实现

    CRC校验的快速算法的C语言实现 CC R校验的快速算法的C语言实现 颜国谷 (中原油田信息中心 4 70 ) 5 0 1 摘要:c c R循环冗余校验算法,是一种在数据存储和数据通讯领域中使用十分广 ...

  8. 【BasicNet系列:六】MobileNet 论文 v1 v2 笔记解读 + pytorch代码分析

    1.MobileNet V1 MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 参考 ...

  9. CRC校验——以SHT30温湿度传感器为例(内附SHT30的驱动代码)

    文章目录 1. 基本原理 2. 计算方法 3. c语言代码实现 4. SHT30代码 4.1 drv.c 4.2 test.c 4.3 Makefile 1. 基本原理  循环冗余校验码(CRC)的基 ...

最新文章

  1. 《 嵌入式系统设计与实践》一一3.6 测试硬件(和软件)
  2. osg 改变模型贴图
  3. 缓冲运动之框架開始一级简单框架实例
  4. 【C语言简单说】十八:二维数组
  5. (转)令人无法理解的死锁案例分析
  6. cocos2dx对于强大的RichText控制
  7. Linux之ssh-add命令
  8. python与office结合可以干什么-Python 进行Office开发(以Word为例)
  9. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_21-CMS前端页面查询开发-Api调用...
  10. 放弃幻想,全面拥抱Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较
  11. Snipast截图软件
  12. WAP网站流量分析 WAP流量统计 wap网站流量统计
  13. 搜狗2020校招【后端】笔试(第二场)
  14. bzero memset置零的性能比较
  15. 如何学习虚拟现实技术vr? vr初级入门教程开始
  16. 知名搜索引擎网站收录提交入口
  17. 罗马数字背后的秘密——LeetCode XII XIII 题记
  18. 谈谈商业分析的思维养成
  19. 微信小程序学习笔记(4)
  20. 安装Linux系统时卡在命令行了,从硬盘安装Linux和从Grub命令行启动操作系统

热门文章

  1. 登录微软账号时无法连接到网络
  2. Daubechies小波介绍
  3. 面试问烂的 Spring AOP 原理、SpringMVC 过程(求求你别问了)
  4. 架构的演进,阿里资深Java工程师表述架构的腐化之谜
  5. WiFi工作模式选择
  6. Token方式 验证登录
  7. Linux编程基础案例:第6章Linux进程管理
  8. Vue+SpringBoot进销存管理系统源码【源码免费分享】
  9. 魅族加入华为鸿蒙系统,魅族正式加入鸿蒙系统,首批产品下周发布!华为:万物皆鸿蒙!...
  10. nginx支持php怎么配置,nginx支持php配置