(python)数据校验-CRC32校验

前言

        在二次开发eCan上位机应用时,遇到了采用CRC(全称是循环冗余校验)32算法校验文件传输完整性的场景,浅浅地记录一下使用心得.

目录

数据校验概念

CRC校验算法

CRC计算原理

算法逻辑

流程图

CRC算法种类

代码实现CRC算法

python实现算法①

python实现算法②

总结


数据校验概念

        数据在传输的过程中,会受到各种干扰的影响,如脉冲干扰,随机噪声干扰和人为干扰等,这会使数据产生差错。为了能够控制传输过程的差错,通信系统必须采用有效的检错方案。因此产生了数据校验。

        数据校验是为保证数据的完整性进行的一种验证操作。通常用一种指定的算法对原始数据计算出的一个校验值,接收方用同样的算法计算一次校验值,如果两次计算得到的检验值相同,则说明数据是完整的。

CRC校验算法

CRC计算原理

        被校验的数据 除以 多项式,得到的余数就是CRC数值。不过这里的除法是模2除法,也就是异或。多项式是通信中双方约定数,可以自己定义,不过目前有各个领域定义好的,可直接用。

算法逻辑

  1. 初始化:设定一个预设值(如 0xFFFFFFFF),作为 CRC32 的初始值。

  2. 移位寄存器:对输入的数据进行逐个处理,将每个字节的数据移入到一个移位寄存器中。开始时,移位寄存器的值等于 CRC32 初始值。

  3. 异或操作:将移位寄存器的值与多项式值进行异或操作,得到一个新的结果。

  4. 查表操作:将上一步计算得到的结果与一个查找表中的数值进行异或操作,得到一个新的 CRC32 值。

  5. 输出结果:将最终的 CRC32 值与指定的输出值进行异或操作,并将结果输出作为加密结果。

流程图

CRC算法种类


{
    //CRC算法名称			宽度  多项式      初始值      结果异或值  输入反转    输出反转
    {"CRC4_ITU", 			4,     0x03,       0x00,       0x00,       E_TRUE,   E_TRUE},
    {"CRC5_EPC", 			5,     0x09,       0x09,       0x00,       E_FALSE,  E_FALSE},
    {"CRC5_ITU", 			5,     0x15,       0x00,       0x00,       E_TRUE,   E_TRUE},
    {"CRC5_USB", 			5,     0x05,       0x1F,       0x1F,       E_TR
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Marst·Writer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值