CRC32校验算法原理及计算说明

这篇具有很好参考价值的文章主要介绍了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的代码为:100000100110000010001110110110111

三、CRC运算说明

CRC运算采用模2运算。
多项式模2运算: 按位异或(Exclusive OR)运算,即相同为0,相异为1。verilog运算符
模2加法
相加无进位,按位异或。

 1011
+0101
-------
 1110

模2减法
无借位,按位异或。

 1011
-0101
-------
 1110

模2乘法
按位与后采用模2加法。

 	 1011
	*0101
--------------
	 1011
	0000
   1011
  0000
---------------
  0100111

模2除法
模2减法,被除数 - 除数,直到得到余数。

四、计算说明

设冗余码为r(x)。将r(x)加在信息段后即形成CRC码。

r(x)的计算方法:在K位信息字段的后面添加R个0,再除以g(x)对应的代码序列,得到的余数即为r(x)对应的代码(若不足,而在高位补0)。

CRC32校验算法原理及计算说明文章来源地址https://www.toymoban.com/news/detail-421010.html

到了这里,关于CRC32校验算法原理及计算说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 5.0 CRC32校验技术概述

    CRC校验技术是用于检测数据传输或存储过程中是否出现了错误的一种方法,校验算法可以通过计算应用与数据的循环冗余校验(CRC)检验值来检测任何数据损坏。通过运用本校验技术我们可以实现对特定内存区域以及磁盘文件进行完整性检测,并以此来判定特定程序内存是否

    2024年02月08日
    浏览(23)
  • 【STM32】CRC(循环冗余校验)

    (1)CRC(Cyclic Redundancy Check),循环冗余校验 (2) 什么是校验,为什么需要校验:数据传输,数据存储过程中需要使用到的 (3)什么是 冗余:表示比实际上要传输的数据还要多 (4)校验实现的关键: 冗余少、运算少、识错纠错能力强 (有些算法只能识别错误但是无法纠错) (1)(

    2024年02月03日
    浏览(39)
  • 循环冗余校验(CRC)的计算

    循环冗余校验(Cyclic Redundancy Check,CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。 若信息码字为111000110,生成多项式 x 5 x^5 x 5 + x

    2024年02月11日
    浏览(37)
  • 从原理到代码理解CRC循环冗余校验

    概述:本文详细介绍了CRC循环冗余计算的数学原理,算法中使用的参数说明,并以Modbus协议中的CRC-16算法为例,进行手算验证,同时提供LabVIEW和C语言的直接计算CRC-16 值的代码以及C的查表计算CRC-16代码和代码原理的说明。 初次接触CRC校验是因为项目需要上位机软件来记录P

    2024年02月04日
    浏览(31)
  • C语言CRC-32 STM32格式校验函数

    CRC-32校验产生4个字节长度的数据校验码,通过计算得到的校验码和获得的校验码比较,用于验证获得的数据的正确性。基本的CRC-32校验算法实现,参考: C语言标准CRC-32校验函数 不同厂家通过对输入数据前处理和输出数据后处理的方式不同,又产生了不同的厂家校验函数,这

    2023年04月27日
    浏览(40)
  • CRC校验算法详解

            数据在传输过程(比如通过网线在两台计算机间传文件)中,由于传输信道的原因,可能会有误码现象(比如说发送数字5但接收方收到的却是6),方法发送额外的数据让接收方校验是否正确,这就是数据校验。常用的校验方法是和校验,就是将传送的数据(按字节

    2024年02月09日
    浏览(25)
  • CRC校验原理与FPGA实现(含推导过程)

      CRC校验全称为循环冗余校验(Cyclic Redundancy Check),常用于数据传输中的错误检测。   在学习CRC校验前,需要了解CRC校验中的几个基本概念: NAME:参数模型名称,比如CRC-8、CRC-16、CRC-32等 WIDTH:CRC校验位宽度 POLY:多项式的简写,用十六进制表示。例如:CRC-8的多项式

    2024年02月03日
    浏览(77)
  • CRC冗余校验的原理和FPGA实现思路

    CRC校验码,顾名思义是用于 校验 的。它可以用于检测数据传输过程中是否出现错误(某些位,或某几位,或者某块区域位错误),反正 可以知道数据出错了,但是不能纠错 。 CRC校验,本质上是模2除法求余。将发送信息 M 当做被除数,发送方和接收方共同约定一个除数 G

    2024年02月08日
    浏览(50)
  • 16位CRC校验码计算,485MODBUS计算

    CRC计算方法是: 1、 加载一值为0XFFFF的16位寄存器,此寄存器为CRC寄存器。 2、 把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的相异或,异或的结果仍存放于该CRC寄存器中。 3、 把CRC寄存器的内容右移一位,用0填补最高位,并检测移出位是0还是1。

    2024年02月11日
    浏览(30)
  • c# 如何编写CRC校验算法

    在C#中编写CRC校验算法,可以使用以下步骤: 首先需要确定CRC校验的多项式和初始值。根据具体的需求和应用场景,选择合适的CRC多项式和初始值。 定义一个计算CRC校验值的函数,函数的输入参数为待校验数据的字节数组,输出参数为计算得到的CRC校验值。 在函数中,先对

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包