奇偶校驗:
所謂通訊過程的校驗是指在通訊資料後加上一些附加資訊,通過這些附加資訊來判斷接收到的資料是否和傳送出的資料相同。比如說rs232
序列通訊可以設定奇偶校驗位,所謂奇偶校驗就是在傳送的每乙個位元組後都加上一位,使得每個位元組中1的個數為奇數個或偶數個。比如我們要
傳送的位元組是0x1a,二進位制表示為0001 1010。
採用奇校驗,則在資料後補上個0,資料變為0001 1010 0,資料中1的個數為奇數個(3個)
採用偶校驗,則在資料後補上個1,資料變為0001 1010 1,資料中1的個數為偶數個(4個)
接收方通過計算資料中1個數是否滿足奇偶性來確定資料是否有錯。(這種方式的正確率不高,一旦發生偶數個位元位錯誤就無法檢測出來)
累加和校驗:
另一種常見的校驗方式是累加和校驗。所謂累加和校驗實現方式有很多種,最常用的一種是在一次通訊資料報的最後加入乙個位元組的校驗數
據。這個位元組內容為前面資料報中全部資料的忽略進製的按位元組累加和。比如下面的例子:
我們要傳輸的資訊為: 6、23、4
加上校驗和後的資料報:6、23、4、33
這裡 33 為前三個位元組的校驗和。接收方收到全部資料後對前三個資料進行同樣的累加計算,如果累加和與最後乙個位元組相同的話就認為傳輸的資料沒有錯誤。
累加和校驗由於實現起來非常簡單,也被廣泛的採用。但是這種校驗方式的檢錯能力也比較一般,對於單位元組的校驗和大概有1/256 的概率將
原本是錯誤的通訊資料誤判為正確資料。之所以這裡介紹這種校驗,是因為crc校驗在傳輸資料的形式上與累加和校驗是相同的,都可以表示
為:通訊資料 校驗位元組(也可能是多個位元組)
crc校驗:
crc 演算法的基本思想是將傳輸的資料當做乙個位數很長的數。將這個數除以另乙個數。得到的餘數作為校驗資料附加到原資料後面。還以上
面例子中的資料為例:
[cpp]
view plain
copy
1、將x的最高次冪為r的生成多項式g(x)轉換成對應的r+1位二進位制數。
2、將資訊碼左移r位,相當於對應的資訊多項式c(x)*2r。
3、用生成多項式(二進位制數)對資訊碼做除,得到r位的餘數(注意:這裡的二進位製做除法得到的餘數其實是模2除法得到的餘數,並不等於其對應十進位制數做除法得到的餘數。)。
4、將餘數拼到資訊碼左移後空出的位置,得到完整的crc碼。
【例】假設使用的生成多項式是g(x)=x3+x+1。4位的原始報文為1010,求編碼後的報文。
解:
1、將生成多項式g(x)=x3+x+1轉換成對應的二進位制除數1011。
2、此題生成多項式有4位(r+1)(注意:4位的生成多項式計算所得的校驗碼為3位,r為校驗碼位數),要把原始報文c(x)左移3(r)位變成1010000
3、用生成多項式對應的二進位制數對左移3位後的原始報文進行模2除(高位對齊),相當於按位異或:
1010000
1011
------------------
0001000
1011
------------------
0011
得到的餘位011,所以最終編碼為:1010011
java 奇偶校驗
奇校驗 param bytes 長度為8的整數倍 param parity 0 奇校驗,1 偶校驗 return throws exception public static byte parityofodd byte bytes,int parity throws exception if par...
奇偶校驗原理
奇偶校驗原理 通過計算資料中 1 的個數是奇數還是偶數來判斷資料的正確性。在被校驗的資料後加一位校驗位或校驗字元用作校驗碼實現校驗。校驗位的生成方法 奇校驗 確保整個被傳輸的資料中 1 的個數是奇數個,即載荷資料中 1 的個數是奇數個時校驗位填 0 否則填 1 偶校驗 確保整個被傳輸的資料中 1 的...
Parity check(奇偶校驗)
description input multiple test cases.each test case is an integer n 0 n 101000 in a single line.output for each test case,output the answer of f n mo...