Python筆記-CRC循環(huán)冗余校驗(yàn)的編程實(shí)現(xiàn)_第1頁(yè)
Python筆記-CRC循環(huán)冗余校驗(yàn)的編程實(shí)現(xiàn)_第2頁(yè)
Python筆記-CRC循環(huán)冗余校驗(yàn)的編程實(shí)現(xiàn)_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Python循環(huán)冗余校驗(yàn)的編程實(shí)現(xiàn)章錄、介紹、算法思想在輸?shù)臅r(shí)候是直接輸?shù)某啥囗?xiàng)式,我們?cè)谟?jì)算CRC 校驗(yàn)碼的時(shí)候需要將成多項(xiàng)式轉(zhuǎn)換成對(duì)應(yīng)的進(jìn)制串。轉(zhuǎn)換的式如下圖( ,成多項(xiàng)式的 相當(dāng)于)X0 x4x4次1先將傳的數(shù)據(jù)進(jìn)寫(xiě)轉(zhuǎn)換,以便之后的處理由于成多項(xiàng)式的最右側(cè)必定為1 ,所以定義個(gè)變量string 直接初始化為列表的最后個(gè)元素將列表的最后個(gè)元素刪除,并對(duì)列表進(jìn)逆序(1 )遍歷列表 lis如果 string 的長(zhǎng)度和 X3 中的數(shù)字值相同時(shí),就表該位的進(jìn)制為1如果 string 遍歷到 X3 卻只有 1 位的長(zhǎng)度時(shí),就說(shuō)明當(dāng)前遍歷到了X0 的位置,但 X2 是不存在成多項(xiàng)式中的,所以需要使個(gè)循

2、環(huán)補(bǔ)全X2 位置 0 ,由于之后需要在當(dāng)前位置補(bǔ)1 ,則需要補(bǔ) 0 的個(gè)數(shù)為 len(lisi1)-len(string)-1#輸數(shù)據(jù)處理expression =expression.upper() #寫(xiě)轉(zhuǎn)換lis =list(expression.split(+) #以加號(hào)為標(biāo)志進(jìn)分割#多項(xiàng)式末尾的數(shù)字1#進(jìn)制轉(zhuǎn)換if len(string)=int(1): #滿位數(shù)與變量的數(shù)字相同時(shí)for j in range(int(1)-len(string): #0補(bǔ)全相差的位數(shù)return string:-1則需要對(duì)輸?shù)臄?shù)據(jù)進(jìn)處理,添加較進(jìn)制串的部0 使得兩個(gè)進(jìn)制串位數(shù)相同。這樣在異或運(yùn)算時(shí),只需

3、要個(gè)循環(huán)同時(shí)遍歷這兩個(gè)字符串如果對(duì)應(yīng)的進(jìn)制不同時(shí),就為結(jié)果字符串result 的末尾添 1 ,否則添 0最后輸出的時(shí)候先遍歷結(jié)果result ,如果遇到第個(gè)有效數(shù)據(jù)時(shí),就將當(dāng)前位置及其之后的字符串以切的式進(jìn)返回。(0 )#輸數(shù)據(jù)處理if len(string1)len(string2): #若后者的位數(shù)不時(shí)for i in range(len(string1)-len(string2): #string2的位補(bǔ)0string2 =0 +string2# print(string1,string2)#異或計(jì)算result +=1else:result +=0# print(result)#輸出數(shù)

4、據(jù)處理for i in range(len(result): #消除異或結(jié)果中的效0if result=1: #找到第個(gè)有效數(shù)據(jù)時(shí)return result:return result在 CRC函數(shù)中,先使個(gè)新的變量bin_expression 保存成多項(xiàng)式轉(zhuǎn)換后的進(jìn)制串在計(jì)算時(shí)需要先在數(shù)據(jù)string 末尾添加指定個(gè)數(shù)的0 , 0 的個(gè)數(shù)等于多項(xiàng)式中的最次。由于在將多項(xiàng)式轉(zhuǎn)換為進(jìn)制時(shí)將會(huì)多出來(lái)位,所以添加0 的個(gè)數(shù)就是 len(bin_expression)-1然后遍歷進(jìn)制數(shù)據(jù)由于在校驗(yàn)碼成的過(guò)程中會(huì)刪除前置0 ,所以需要補(bǔ) 0 的操作( 0,保險(xiǎn)起見(jiàn)還是加了上去)#輸數(shù)據(jù)處理bin_exp

5、ression =TurnBin(expression) #轉(zhuǎn)換為進(jìn)制串for i in range(len(bin_expression)-1): #在進(jìn)制串末尾補(bǔ)0string +=0for i in range(len(string): #遍歷被除數(shù)進(jìn)制串crc +=stringif len(crc)=len(bin_expression): #當(dāng)位數(shù)夠異或計(jì)算時(shí)crc =(crc,bin_expression)# print(crc)#輸出數(shù)據(jù)處理if len(crc)len(bin_expression)-1: #crc位數(shù)過(guò)多時(shí)crc =crclen(crc)-len(bin_ex

6、pression)+1: #切,消除部多余的0return crc在檢驗(yàn) CRC的步驟使的是之前的CRC函數(shù)傳的成多項(xiàng)式同樣需要經(jīng)過(guò)進(jìn)制轉(zhuǎn)換,傳進(jìn)制串?dāng)?shù)據(jù)的末尾是對(duì)應(yīng)的校驗(yàn)碼。計(jì)算 CRC校驗(yàn)碼時(shí),切的范圍為0len(string)-len(bin_expression)+1 計(jì)算出來(lái)校驗(yàn)碼后,就將計(jì)算出來(lái)的crc 與原始數(shù)據(jù)的 right_crc 進(jìn)對(duì)如果兩個(gè)校驗(yàn)碼相同,則表數(shù)據(jù)傳輸正常。如果兩個(gè)校驗(yàn)碼不同,則表數(shù)據(jù)傳輸出錯(cuò)。def CheckCRC(string,expression): #檢測(cè)傳輸數(shù)據(jù)是否正確,并打印結(jié)果#輸數(shù)據(jù)處理bin_expression =TurnBin(expr

7、ession)right_crc =stringlen(string)-len(bin_expression)+1: #原數(shù)據(jù)末尾的crc校驗(yàn)碼#CRC計(jì)算crc =(string:len(string)-len(bin_expression)+1:,expression)if right_crccrc: #當(dāng)尾部的校驗(yàn)碼,與部數(shù)據(jù)成的校驗(yàn)碼致時(shí)print(.)print(,crc)print(,right_crc)剩下的代碼屬于主函數(shù)中界的設(shè)計(jì)部分,就不詳細(xì)介紹了三、代碼再變更進(jìn)制數(shù)據(jù)的某些位,并在數(shù)據(jù)末尾添加原本數(shù)據(jù)產(chǎn)的CRC校驗(yàn)碼進(jìn)檢測(cè)將原始數(shù)據(jù)添加上對(duì)應(yīng)的校驗(yàn)碼進(jìn)檢測(cè)CRC# 作者:狐

8、貍# 題:循環(huán)冗余校驗(yàn)def TurnBin(expression):#輸數(shù)據(jù)處理expression =expression.upper() #寫(xiě)轉(zhuǎn)換lis =list(expression.split(+) #以加號(hào)為標(biāo)志進(jìn)分割#多項(xiàng)式末尾的數(shù)字1#進(jìn)制轉(zhuǎn)換for i in range(len():if len(string)=int(1): #滿位數(shù)與變量的數(shù)字相同時(shí)string +=1else:for j in range(int(1)-len(string): #0補(bǔ)全相差的位數(shù)1result =#輸數(shù)據(jù)處理if len(string1)len(string2): #若后者的位數(shù)不時(shí)

9、string2 =0 +string2# print(string1,string2)#異或計(jì)算#輸出數(shù)據(jù)處理for i in range(len(result): #消除異或結(jié)果中的效0if result=1: #找到第個(gè)有效數(shù)據(jù)時(shí)return result:#輸數(shù)據(jù)處理bin_expression =TurnBin(expression) #轉(zhuǎn)換為進(jìn)制串for i in range(len(bin_expression)-1): #在進(jìn)制串末尾補(bǔ)0string +=0for i in range(len(string): #遍歷被除數(shù)進(jìn)制串crc +=stringif len(crc)=l

10、en(bin_expression): #當(dāng)位數(shù)夠異或計(jì)算時(shí)crc =(crc,bin_expression)# print(crc)#輸出數(shù)據(jù)處理if len(crc)len(bin_expression)-1: #crc位數(shù)過(guò)多時(shí)crc =crclen(crc)-len(bin_expression)+1: #切,消除部多余的0return crcdef CheckCRC(string,expression): #檢測(cè)傳輸數(shù)據(jù)是否正確,并打印結(jié)果#輸數(shù)據(jù)處理bin_expression =TurnBin(expression)right_crc =stringlen(string)-len(bin_expression)+1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論