異或循環冗余

異或

  • 代碼
  • 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
英文地址,請注明出處:http://en.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…