CRC32计算过程与参数解释

一. CRC的作用

        CRC用于对传输的数据进行检错。数据传输中,由于信号干扰,设备电压等多种因素,可能导致传输期间电平发生变化,使传输的数据出错。若传输1400字节的正确率为99.9%,为了保证传输正确性,可传输1400字节两次,若两次传输的数据相同,则认为数据正确,从而使出错率从0.001减少为0.000001,这种方法虽然提高了正确率,但重复传输相同字节数会使有效带宽下降一半,带宽中传输了一半的冗余信息。因而需要一种传输少量冗余信息便能判断出传输的数据是否错误的算法。CRC便是这样的算法。

二. CRC在数据传输中的操作流程

        在数据发送方计算待传输数据的CRC,并按照协议格式,将CRC码添加到数据包的对应位置。数据接收方接收到数据后,计算接收数据的CRC,并与发送方发送的CRC码比对,若CRC码不相同,即认为传输出错。

三. 计算CRC的流程(以CRC32为例)

        CRC计算以模2运算为主,但实际上CRC算法还有多项配置,会改变计算过程,导致CRC计算结果不同。本文将以CRC32为例,介绍从原始数据计算得到最终结果的步骤,并对于与配置参数相关的步骤进行解释。

1. 计算的数据及算法

计算的原始数据为ASCII码'8',对应16进制0x38,对应2进制:00111000

截取在线CRC计算网页截图如下,网址:CRC(循环冗余校验)在线计算_ip33.com

其中有参数:

宽度:对应最终计算得出的CRC码的位宽,步骤3和步骤5第4小步需要使用

多项式:将其与原数据进行模2运算,对应步骤5

初始值:计算前将输入数据与初始值做异或运算,对应步骤4

结果异或值:将模2运算的结果与该值做异或运算,对应步骤6

输入数据反转:将输入数据按位反向输出,对应步骤2

输出结果反转:将结果按位反向输出,对应步骤7

计算结果: 0xFA005713

2. 输入反转,对应参数:REFIN=True

将输入数据按位(bit)反向输出

00111000 -> 00011100

3. 为输入数据添加32bit 0

00011100 -> 00011100 00000000 00000000 00000000 00000000

4. 与初始值异或:对应参数:初始值 INIT:0xffffffff

对应二进制:

11111111 11111111 11111111 11111111

源数据与初始值异或:

00011100 00000000 00000000 00000000 00000000

11111111 11111111 11111111 11111111

得到:

11100011 11111111 11111111 11111111 00000000

5. 与多项式做模2运算

CRC32标准多项式:

0x04C11DB7

对应二进制:

00000100 11000001 00011101 10110111

由于需要的CRC为32位,并且CRC的校验值为模2运算的余数,因而需要在32位多项式最高位之前再加一位1

得到:

1 00000100 11000001 00011101 10110111

下面是模2运算的步骤

(1) 进行异或运算 第一行为源数据,第二行为多项式,第三行为结果

1110001111111111111111111111111100000000

100000100110000010001110110110111

0110000110011111011100010010010010000000

(2)对结果再做模2运算,由于第一位为0,因而将多项式右移一位

0110000110011111011100010010010010000000

 100000100110000010001110110110111

 010000010101111001101100100100101000000

(3) 重复第2步的操作

010000010101111001101100100100101000000

 100000100110000010001110110110111

 00000000110111000101011111111110100000

(4) 重复第2步的操作

00000000110111000101011111111110100000

     100000100110000010001110110110111

发现余数已经小于多项式,因而模2运算的结果为:

00000000110111000101011111111110100000

去掉前面的0,并取32bit长度,得到

00110111000101011111111110100000

6. 将模2运算结果与0xffffffff做异或,对应参数:结果异或值 XOROUT:FFFFFFFF

00110111000101011111111110100000

11111111111111111111111111111111

得到:

11001000111010100000000001011111

7. 将第6步的结果按bit顺序反向输出:对应参数:输出数据反转(REFOUT)= True

11111010000000000101011100010011

转换为16进制:

FA005713



 

  • 28
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CRC(循环冗余校验)是一种常用的错误检测码算法,用于验证数据在传输过程中是否发生了错误。CRC算法是基于多项式除法的原理,通过对数据进行一系列的异或和取模运算来计算出校验值。 CRC算法计算所需的参数包括生成多项式和初始值。生成多项式是一个固定的值,用于定义校验码的计算规则。常见的生成多项式有CRC-8、CRC-16和CRC-32等。初始值是计算的起始状态,一般可以设置为0或者其他预定义的值。 CRC计算的步骤如下: 1. 将原始数据组合上若干个0,填充到生成多项式的位数-1。 2. 将填充后的数据与初始值进行异或操作,并将结果作为新的计算值。 3. 对新的计算值的最高位开始,判断是否为1。 - 若为1,将生成多项式与新的计算值进行异或操作,并将结果作为新的计算值。 - 若为0,则将新的计算值左移一位。 4. 重复步骤3,直到计算值的最高位为0且计算完所有位数。 5. 最后得到的计算值即为CRC校验值。 自定义参数计算就是根据自己的需求选择合适的生成多项式和初始值,在计算CRC校验值时使用这些自定义的参数。通过选择不同的参数,可以提高CRC算法的性能和适应性,例如可以针对不同类型的数据选择不同的生成多项式,并根据实际传输环境调整初始值,以提高错误检测能力。 但需要注意的是,自定义参数计算需要确保计算使用的参数与接收端进行校验时使用的参数一致,否则无法正确验证数据的完整性。因此,在使用自定义参数计算CRC校验值时,需要事先与接收端协商并确定好参数的取值。 ### 回答2: CRC是循环冗余校验码的缩写,是一种常用的错误检测方式。在进行CRC计算时,可以根据不同的需求来自定义参数。 首先,CRC计算需要确定生成多项式。生成多项式可以由多个参数组成,常见的生成多项式有CRC-8、CRC-16和CRC-32等。根据实际需求,可以选择不同的生成多项式。 其次,需要确定初始值。CRC计算时,需要给定一个初始值,通常是一个全1或全0的二进制数。初始值的选取有一定的灵活性,可以根据具体情况来定。 然后,还需要确定是否进行比特翻转。有时候,为了满足特定的需求,需要在计算CRC时对输入数据进行比特翻转。比特翻转可以通过改变生成多项式的系数来实现。 最后,还需要确定结果的处理方式。CRC计算结果通常是一个固定位数的二进制数。在实际应用中,可以根据需求将二进制数转换成十进制数或十六进制数。 综上所述,CRC自定义参数计算涉及到生成多项式、初始值、比特翻转和结果处理方式的确定。根据实际需求,可以制定不同的计算参数,从而实现CRC的自定义计算。 ### 回答3: CRC(循环冗余校验)是一种错误检测技术,常用于网络通信和存储系统中。其基本原理是通过对数据进行多项式除法,得到一个余数作为校验码。 CRC计算参数通常分为两部分:生成多项式和初始值。生成多项式定义了CRC计算的规则,而初始值则影响了计算的起始状态。 自定义参数计算指的是根据需求来选择生成多项式和初始值的过程。生成多项式通过选择不同的多项式来确定计算的规则。常见的生成多项式有CRC-8、CRC-16和CRC-32等,不同规模的系统可以选择适合的生成多项式。 而初始值则决定了计算的起始状态,不同的初始值会导致不同的校验码。一般来说,初始值可以为全0或全1。在计算过程中,数据位依次与初始值进行异或操作得到下一状态的值。 自定义参数计算需要根据具体的需求来选择生成多项式和初始值。选择合适的生成多项式可以提高CRC的校验能力,而选择不同的初始值可以保证生成的校验码有较大的差异性。 总结起来,CRC自定义参数计算即根据需求选择合适的生成多项式和初始值来计算CRC校验码。通过自定义参数可以改变校验规则和校验结果,以满足具体的通信需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值