回覆列表
-
1 # 曾晡厝
-
2 # 用戶1908847539477
CRC16校驗碼是一種循環冗餘校驗碼,用於檢測數據傳輸過程中的錯誤。其原理如下:
將要傳輸的數據按照一定的規則進行分組,每組數據的長度為16位。
在每組數據的末尾添加16位的校驗碼,校驗碼的計算方法是將該組數據看作一個多項式,然後對該多項式進行除法運算,得到餘數作為校驗碼。
接收方在接收到數據後,同樣按照相同的規則進行分組,並計算每組數據的校驗碼。
接收方將接收到的數據看作一個多項式,然後對該多項式進行除法運算,得到餘數。如果餘數為0,則說明數據傳輸過程中沒有出現錯誤;否則,說明數據傳輸過程中出現了錯誤。
CRC16校驗碼的計算方法比較複雜,需要使用一些數學算法來實現。常見的CRC16校驗碼算法有很多種,例如CRC-CCITT、CRC-16-IBM等。不同的算法使用不同的生成多項式和初始值,因此計算出來的校驗碼也不同。
-
3 # 莫丶然
CRC16是基於循環冗餘校驗(Cyclic Redundancy Check)的一種校驗算法,用於對數據進行校驗,以確保數據在傳輸過程中的完整性和準確性。CRC16校驗碼的生成過程如下:
1. 初始化一個16位的寄存器,即所有位都設置為0。
2. 將待校驗的數據按位拆分成16位塊。
3. 將每一個16位塊都與剛剛創建的16位寄存器做異或運算。
4. 對異或運算的結果進行移位,直到指定的位數。
5. 將移位後的結果再次與剛剛創建的16位寄存器做異或運算。
6. 重複3 - 5步,處理下一個塊,直到最後一個塊被處理完為止。
7. 最終,16位寄存器裡存儲的就是CRC16校驗碼。
因此,CRC16校驗碼的設計原理是確保對於給定長度的數據,即使進行了某種錯誤修改,也可以通過計算所得的校驗和來檢測出這種錯誤的修改,從而保證數據的完整性和準確性。
我們的代碼只有極個別的指令發送了CRC,這個CRC是固定的,事先計算好的,比如那個0X95。
其他的CRC都沒有使用。
如果要用,你可以搞一個CRC生成的程序,用於生成CRC利用CRC進行檢錯的過程可簡單描述為:在發送端根據要傳送的k位二進制碼序列,以一定的規則產生一個校驗用的r位監督碼(CRC碼),附在原始信息後邊,構成一個新的二進制碼序列數共k+r位,然後發送出去。在接收端,根據信息碼和CRC碼之間所遵循的規則進行檢驗,以確定傳送中是否出錯。這個規則,在差錯控制理論中稱為“生成多項式”。