CRC32校验算法原理及计算说明
本文主要介绍如何使用CRC32校验算法计算得出FCS(Frame Check Sequence帧检验序列).
参考:
1、CRC32加密算法原理
2、CRC多项式对应代码
一、CRC基本原理(Cyclic redundancy check循环冗余校验)
作用:在远距离数据通信中,为确保高效而无差错地传送数据,对数据进行校验即差错控制。
|——————— CRC码 N bits ————————————————|
|————— 信息段 K bits ————|-FCS R bits-|
CRC原理实际上就是在一个K位二进制数据序列之后附加一个R位二进制检验码(序列),从而构成一个总长为N=K+R位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。
二、多项式说明
生成多项式(generator polynomial):当进行CRC检验时,发送方与接收方事先约定一个除数,即生成多项式,一般记作G(x)。生成多项式的最高位与最低位必须是1。常用的CRC码的生成多项式有:
CRC8=X8+ X5+X4+1
CRC-CCITT=X16+X12+X5+1
CRC16=X16+X15+X5+1
CRC12=X12+X11+X3+X2+1
CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1
多项式与其对应代码:
若X的最高次幂为R,那么对应代码应该有R+1位数。
以CRC8=X8+X5+X4+1为例,从bit0开始,CRC8没有X1,X2,X3,X6,X7,则其代码为 100110001.
如此可以得到CRC32的代码为:10000100110000010001110110110111
三、CRC运算说明
CRC运算采用模2运算。
多项式模2运算: 按位异或(Exclusive OR)运算,即相同为0,相异为1。verilog运算符
模2加法
相加无进位,按位异或。
1011
+0101
-------1110
模2减法
无借位,按位异或。
1011
-0101
-------1110
模2乘法
按位与后采用模2加法。
1011*0101
--------------1011000010110000
---------------0100111
模2除法
模2减法,被除数 - 除数,直到得到余数。
四、计算说明
设冗余码为r(x)。将r(x)加在信息段后即形成CRC码。
r(x)的计算方法:在K位信息字段的后面添加R个0,再除以g(x)对应的代码序列,得到的余数即为r(x)对应的代码(若不足,而在高位补0)。
CRC32校验算法原理及计算说明相关推荐
- C语言 crc32校验算法原理,CRC循环冗余校验的实现原理
之前在做学校项目的时候用到了CRC 原理,但在网上查找的过程中,发现讲解CRC知识的资源很多,但是对新手比较友好的.讲的十分清楚的又很少,很多资料也不完善,读起来心中常常不由自主地奔腾过上千个&quo ...
- 【转载】CRC32校验算法C语言版(查表法)
先放原文链接:CRC32校验算法C语言版(查表法) 这几天搞串口通信,用到CRC32,把以前用到的东西整理一下,方便以后使用. STM32F103 芯片自带的CRC32硬件算法,匹配上位机CRC32算 ...
- C#:实现CRC32校验算法(附完整源码)
C#:实现CRC32校验算法 /// <summary>/// 计算给定长度数据的32位CRC/// </summary>/// <param name="da ...
- crc32校验算法_UDP/IP硬件协议栈设计(三):校验
前面已经完成了协议的解析分类,但是不能对分类好的数据帧再进行相关的校验计算,白白浪费时间,为降低延时,所以需要在分类的同时完成校验计算. 校验,就是通过增加冗余位来验证数据完整性的一个操作,对于谁是真 ...
- CRC32校验算法(查表法)
CRC算法参数 CRC result width: 32 bits Polynomial: 04C11DB7h Initial value: FFFFFFFFh Input data reflecte ...
- 文件传输校验-crc32校验算法
文件传输校验,用于升级的时候使用较多: 场景:传输前先获取文件长度,获取文件内容,然后对文件校验--获得u32的校验信息变量:设定每包长度,将其封装到握手包: ----> <---- 对端 ...
- CRC32校验原理及实现
CRC即循环冗余校验(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定. CRC校验实用程序库:在数据存储和数据通 ...
- 异或校验算法 c语言程序,C# 异或校验算法
C# 的异或校验算法 直接上代码 public partial class FormCRC : Form { public FormCRC() { InitializeComponent(); } p ...
- tcp中的crc检验算法原理_CRC校验原理及其实现
原文作者:王超的独立博客 出处:http://www.wangchaochao.top/2020/09/20/Principle-and-implementation-of-CRC/ 前言 最近的工作 ...
最新文章
- 【Codeforces】53D Physical Education (有点像冒泡)
- 我们为你精选了一份Jupyter/IPython笔记本集合 !(附大量资源链接)-下篇
- 3、HTML <a>标签(超链接)
- java中Runnable和Callable的区别
- .NET Core Tools 1.0 版本
- 小菜:Java异常处理的10个最佳实践
- hackathon活动复盘
- 周易 —— 文本阅读
- 【笔记】VUE学习笔记
- TypeError: tuple indices must be integers, not tuple是怎么回事
- 对比jQuery和AngularJS的不同思维模式
- Aaron Swartz Rewriting Reddit中关于web.py的创建思路
- 计算机硬盘 u盘和光盘属于,磁盘U盘光盘的区别
- ZooKeeper 客户端: GUI+命令行两大类(史上最全,值得收藏)
- 王道考研系列 计算机考研 ——机试指南(第二版) 笔记(一)
- 巴伦变压器电路图_基于变压器的RF巴伦配置及参数介绍
- win10远程计算机管理,Win10专业版远程控制电脑有哪些方法?
- 关于git push报hook declined
- 【转载】 mybatis入门系列四之动态SQL
- 如何注册电子邮箱账号,教你创建email邮箱账号