c语言 crc,C语言获取文件CRC32算法附加CRC原理

本文介绍了CRC校验的基本思想和16位CRC码的生成规则,重点讲解了CRC32的原理和计算过程。通过C语言实现了一个与WINRAR中CRC值一致的CRC32计算函数,用于获取文件的CRC32值。
摘要由CSDN通过智能技术生成

搞弄了半天,终于把CRC的原理大致明白了,其实质上就是先确定一个多项式作为CRC标准,然后将二进制序列左移对应的位数再除以这个多项式,最后得到的余数就是CRC码。下面是网上找到的CRC原理,不弄长的了,凑合看吧。

CRC 校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(既CRC 码)r 位,并附在信息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去。在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。

16 位的CRC 码产生的规则是先将要发送的二进制序列数左移16 位(既乘以2的16次方)后,再除以一个多项式,最后所得到的余数既是CRC 码。

求CRC码所采用的模2加减运算法则,即是不带进位和借位的按位加减,这种加减运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。

生成CRC码的多项式如下,其中CRC-16 和CRC-CCITT产生16 位的CRC码,而CRC-32 则产生的是32 位的CRC码,不同的标准计算出来的CRC值不同。

CRC-16:(美国二进制同步系统中采用) G(X ) = X16 + X15 + X2 +1

CRC-CCITT:(由欧洲CCITT 推荐) G(X ) = X16 + X12 + X5 +1

CRC-32: G(X ) = X32 + X26 + X23 + X22 + X16 + X12 + X1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值