异或循环冗余

异或

  • 代码
  • CRC8-ITU
    • 例程
    • 比较
  • 计算
  • CRC16
  • 异或
    • 改进
    • 测试
    • 重点

代码

def fun_crc(datas):crc = 0xFF poly = 0x07 for i in range(len(datas)):for j in range(7, -1, -1):if (crc & 0x80) == 0x80: crc = (crc << 1) ^ polyelse:crc = (crc << 1)if (datas[i] & 2**j):#值为1的位再异或crc ^= polyreturn crc & 0xFF

与一般的CRC8有些不一样。

CRC8-ITU

ITU的全称是国际电信联盟(International Telecommunication Union)。它是一个负责信息通信事务的联合国专门机构,成立于1865年,总部位于瑞士日内瓦。

例程

def cal_crc(datas):crc = 0xFF #初始值poly = 0x07 # 多项式x^8 + x^2 + x^1 + 1,即0x107,省略了最高位1而得0x07for i in range(len(datas)):crc = (crc ^ datas[i]) & 0xFFfor j in range(8, 0, -1):if (crc & 0x80) == 0x80: # 判断最高位是否为1,如果是需要异或,否则仅左移crc = (crc << 1) ^ polyelse:crc = (crc << 1)return crc & 0xFF # 计算后需要进行截取

比较

datas = [0xCB]
start = time.time()	 
print(hex(cal_crc(datas))) 
print("一般循环冗余算法",time.time() - start)
start = time.time()	
print(hex(fun_crc(datas))) 
print("循环冗余算法",time.time() - start)
0x8c
一般循环冗余算法 0.013336658477783203
0x8c
循环冗余算法 0.00408172607421875

计算的结果是一样的,用时还少一点。再用小学三年级上学期的除法算式算一下。

计算

计算CRC8计算过程

不同之处会是多项式除法的一个性质吗,或者是模二运算的性质?

CRC16

开始用的查表法,表里也只有256个元素。用上面两种方式计算的时候要移一个字节,或者直接改成计算16位两个字节。

异或

不一样的是不异或,在计算时处理。可以把(datas[i] & 2**j)的判断放到前面吗?免得异或一次再异或回去。

改进

def fun2_crc(datas):crc = 0xFF #初始值poly = 0x07 # 多项式x^8 + x^2 + x^1 + 1,即0x107,省略了最高位1而得0x07for i in range(len(datas)):for j in range(7, -1, -1):if (datas[i] & 2**j):#与1异或要翻转if (crc & 0x80) == 0x80: crc = (crc << 1)else:crc = (crc << 1) ^ polyelse:#0或1与0异或不翻转if (crc & 0x80) == 0x80: crc = (crc << 1) ^ polyelse:crc = (crc << 1)return crc & 0xFF # 计算后需要进行截取

测试

datas = [0xCB]
for i in range(1000):datas.extend(random.sample(range(255),100))
print(len(datas))
start = time.time()	 
print(hex(cal_crc(datas))) # 输出CRC8校验码
print("一般循环冗余算法",time.time() - start)
start = time.time()	
print(hex(fun_crc(datas))) # 输出CRC8校验码
print("循环冗余算法",time.time() - start)
start = time.time()
print(hex(fun2_crc(datas))) # 输出CRC8校验码
print("改进循环冗余算法",time.time() - start)

把数据增加到十万。打印

 100001
0x27
一般循环冗余算法 0.04993319511413574
0x27
循环冗余算法 6.126452922821045
0x27
改进循环冗余算法 5.69709587097168   

重点

0或1与0异或不翻转,与1异或要翻转。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95002.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一款轻量、免费、无广告,强大的演示工具,支持屏幕放大、涂鸦、截图、录屏

软件介绍 ZoomIt&#xff0c;是一款轻量、免费、无广告&#xff0c;强大的演示工具&#xff0c;支持屏幕放大、涂鸦、截图、录屏等。在系统托盘中不显示的运行&#xff0c;可自定义快捷键&#xff0c;使用方面。 软件基础功能 屏幕放大&#xff1a;按下快捷键“Ctrl1”可进入…

从街亭失守看管理

最近看了《三国演义》&#xff0c;重温了街亭失守事件&#xff0c;从马谡最耀眼的登场来看就是&#xff0c;火烧藤甲兵计策和诸葛亮不谋而合&#xff0c;说明马谡确实是有真材实料的&#xff0c;但在守街亭的任务上&#xff0c;诸葛亮也踌躇过又对先帝的遗言“马谡不可重用”记…

全面解析 URL 重定向原理:从协议、实现到安全实践

一、什么是 URL 重定向&#xff1f; URL 重定向&#xff08;URL Redirection&#xff09;是 Web 技术中一种将用户请求的 URL 自动转向另一个目标 URL 的机制。用户可能完全不会察觉跳转发生&#xff0c;因为浏览器在幕后完成了一切。 重定向通常用于以下场景&#xff1a; 网…

多任务 Transformer 模型的高效任务间注意力

抽象 在计算机视觉和更广泛的深度学习领域&#xff0c;Transformer 架构已被公认为许多应用程序的最先进技术。然而&#xff0c;对于多任务学习&#xff0c;与单任务模型相比&#xff0c;可能需要更多的查询&#xff0c;考虑到实际的硬件限制&#xff0c;它的多头注意力通常接近…

QT的常用控件说明

文章目录基本的代码的模板Label控件font字体相关Button 控件CheckBox 控件Radio控件ComboBox控件LineEdit 控件基本的代码的模板 class MainWindow(QWidget):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs) # 调用父类初始化方法# 声明窗口实例# 代…

5Python异常处理与模块导入全指南

目录 什么是异常&#xff1f; 异常的捕获方法&#xff1a; 为什么要捕获异常&#xff1f; 捕获异常的语法&#xff1a; 异常的else和finally语法&#xff1a; 什么是异常&#xff1f; 异常就是程序运行过程中出现了错误&#xff0c;也就是我们常说的出bug了-。- 异常的捕…

区块链密码学简介

区块链密码学简介 一、对称密码算法 概述 对称密码算法的主要特点是使用相同的密钥进行加密和解密。这类算法根据其加密方式大致可以分为两类:流密码和分组密码。区块链技术主要采用分组密码。流密码以数据流的形式逐位或逐字节加密,而分组密码则将数据分成固定大小的块进行…

GridKernalGateway

GridKernalGateway 是 Apache Ignite 架构中一个关键的安全与状态管理组件&#xff0c;它的作用是 “在公共 API 和内部内核&#xff08;kernal&#xff09;之间建立安全、可控的访问通道”。 我们可以把它理解为一个 “门卫 状态哨兵”&#xff0c;确保外部调用不会在 Ignite…

MySQL索引、B+树相关知识总结

MySQL索引、B树相关知识汇总一、有一个查询需求&#xff0c;MySQL中有两个表&#xff0c;一个表1000W数据&#xff0c;另一个表只有几千数据&#xff0c;要做一个关联查询&#xff0c;如何优化&#xff1f;1、为关联字段建立索引2、小表驱动大表二、b树和b树的区别1、更高的查询…

Java学习进阶 -- 泛型的继承和通配符及综合练习

首先&#xff0c;泛型不具备继承性&#xff0c;但是数据具备继承性1.核心概念解析泛型不具备继承性即使类型A是类型B的子类&#xff0c;Generic<A>也不是Generic<B>的子类这是Java泛型的类型安全设计&#xff0c;防止不安全的类型转换数据具备继承性泛型容器中的元…

如何实现在多跳UDP传输场景,保证单文件和多文件完整传输的成功率?

如何实现在多跳UDP传输场景&#xff0c;保证单文件和多文件完整传输的成功率&#xff1f; 一、前言 UDP&#xff08;User Datagram Protocol&#xff09;是一个轻量、无连接的传输协议&#xff0c;广泛用于低延迟、高吞吐的应用中&#xff0c;如视频流、实时游戏等。然而&…

【Spring IoC 核心实现类详解:DefaultListableBeanFactory】

Spring IoC 核心实现类详解&#xff08;源码原理&#xff09;作为 Spring 的灵魂&#xff0c;IoC 容器&#xff08;Inversion of Control&#xff09;是整个框架的核心。 那么 IoC 的“心脏”到底是哪个类&#xff1f;它是怎么管理和装配 Bean 的&#xff1f;本文将从源码层面深…

为什么开启JWT全局认证后,CSRF失败会消失?

这是因为 JWT认证与CSRF校验的设计逻辑完全不同&#xff0c;当全局启用JWT认证后&#xff0c;Django的CSRF校验会被“绕过”或不再生效&#xff0c;具体原因如下&#xff1a; 核心原因&#xff1a;JWT认证不依赖Cookie&#xff0c;无需CSRF保护 1. CSRF的作用场景 CSRF攻击的前…

宝龙地产债务化解解决方案二:基于资产代币化与轻资产转型的战略重构

一、行业背景与代币化创新趋势1.1 房地产债务危机现状宝龙地产&#xff08;01238.HK&#xff09;截至2024年中债务总额达584亿元&#xff0c;其中50.7%为一年内到期债务&#xff0c;但现金储备仅89.47亿元&#xff0c;短期偿债覆盖率不足30%。2025年2月境外债务重组计划因债权人…

深信服GO面试题及参考答案(下)

Kubernetes 与容器 Kubernetes(简称 K8s)是容器编排平台,而容器是轻量级的虚拟化技术,两者紧密关联但定位不同,容器是 K8s 管理的核心对象,K8s 为容器提供了完整的生命周期管理、扩展和运维能力。 容器技术(如 Docker)通过 Linux 命名空间(Namespace)、控制组(CGro…

RAGFoundry:面向检索增强生成的模块化增强框架

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; 1. 背景与动机 大型语言模型&#xff08;LLMs&#xff09;存在 知识静…

(第十期)HTML基础教程:文档类型声明与字符编码详解

&#xff08;第十期&#xff09;HTML基础教程&#xff1a;文档类型声明与字符编码详解 前言 在使用VS Code等现代编辑器生成HTML页面时&#xff0c;你会发现自动生成的代码中多了一些看似陌生但又非常重要的标签。这些标签不是多余的&#xff0c;而是现代Web开发的标准配置。…

OpenAPI(Swagger3)接口文档自定义排序(万能大法,支持任意swagger版本)

前置参考文档 基于OpenAPI(Swagger3)使用AOP技术&#xff0c;进行日志记录 使用SpringAOP的方式修改controller接口返回的数据 SpringBoot3集成OpenAPI3(解决Boot2升级Boot3) 总结一句话&#xff1a;既然没办法去通过各种方法或者官方的接口去修改接口顺序&#xff0c;那我们就…

vue3上传的文件在线查看

1、npm install vue-office/pdf vue-demi 安装依赖2、npm install vue-office/excel vue-demi 安装依赖3、npm install vue-office/docx vue-demi 安装依赖4、编写一个通用组件&#xff0c;现在只支持 .docx,.xlsx,.pdf 格式的文件&#xff0c;其他文件渲染不成功<temp…

深度学习中基于响应的模型知识蒸馏实现示例

在 https://blog.csdn.net/fengbingchun/article/details/149878692 中介绍了深度学习中的模型知识蒸馏&#xff0c;这里通过已训练的DenseNet分类模型&#xff0c;基于响应的知识蒸馏实现通过教师模型生成学生模型&#xff1a; 1. 依赖的模块如下所示&#xff1a; import arg…