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. Docker镜像推送(push)到Docker Hub
  2. How to install sharepoint server 2010 sp2 in window 7 x64
  3. 细说JavaScript对象(1):对象的使用和属性
  4. Hacker News热文:请停止学习框架,学习领域驱动设计(DDD)(获500个点赞)
  5. 物联网时代会给我们带来怎么样的改变?
  6. bat从数组中找出相同数字并删除_全网把Map中的hash()分析的最透彻的文章,别无二家...
  7. confirm修改按钮文字_条码设计软件如何调整条形码与条码文字之间的距离
  8. JavaScript基础教程新手入门必看
  9. new对象后的代码块(匿名类)
  10. 王者荣耀服务器维护七月三号,王者荣耀3月23日更新维护公告 自然之灵拼图活动开启...
  11. 【Web技术】771- 图片懒加载从简单到复杂
  12. 软考-中级-网络工程师-知识点个人总结(八)
  13. vue中用canvas 画一个六边形 类似蜂窝形的功能导航主菜单
  14. C#数据结构与算法总结
  15. 使用PowerShell替代WinDbg在高分辨率笔记本下调试、排错
  16. 小播本地音乐功能指引
  17. 微信里的小程序怎么制作
  18. 基于SLAM的机器人导航避障方案
  19. 视频压缩编码基本原理
  20. 湖泊遥感研究进展(概述)

热门文章

  1. 计算机和教师教学的应用,计算机在教学中的应用优势
  2. 用于广告机,闸机设备,自助售货机,工控主机等的rk3288开发板
  3. python与金融投资_金融量化投资与Python
  4. c++获取系统时间戳和unix时间(毫秒级)
  5. 计算机原理1046Q是什么意思,半桥驱动电路工作原理,半桥驱动电路的作用是什么 - 功率器件 - 电子发烧友网...
  6. B2B云进销存ERP系统连锁版原型(附赠:5套后台框架模版)
  7. Python实现快速幂取余算法
  8. java+解析png+gif图片_Java 转换png jpg gif格式图片的相互转换的实现
  9. 使用Microsoft.Practices.EnterpriseLibrary.Data调用存数过程Output参数注意事项
  10. 怎样成为一名优秀的系统集成工程师