串口通信中數據的奇偶校驗位算法
轉載
奇偶校驗位是一個表示給定位數的二進制數中 1 的個數是奇數還是偶數的二進制數。奇偶校驗位是最簡單的錯誤檢測碼。奇偶校驗位有兩種類型:偶校驗位與奇校驗位。如果一組給定數據位中 1 的個數是奇數,那么偶校驗位就置為 1,從而使得總的 1 的個數是偶數。如果給定一組數據位中 1 的個數是偶數,那么奇校驗位就置為 1,使得總的 1 的個數是奇數。偶校驗實際上是循環冗余校驗的一個特例,通過多項式 x + 1 得到 1 位 CRC
對數據傳輸正確性的一種校驗方法。在數據傳輸前附加一位奇校驗位,用來表示傳輸的數據中"1"的個數是奇數還是偶數,為奇數時,校驗位置為"0",否則置為"1",用以保持數據的奇偶性不變。例如,需要傳輸"11001110",數據中含5個"1",所以其奇校驗位為"0",同時把"110011100"傳輸給接收方,接收方收到數據后再一次計算奇偶性,"110011100"中仍然含有5個"1",所以接收方計算出的奇校驗位還是"0",與發送方一致,表示在此次傳輸過程中未發生錯誤。
大家一定會問,如何計算奇偶性呢,在計算機內有一種特殊的運算它遵守下面的規則:
1+1=0; 1+0=1; 0+1=1; 0+0=0;我們把傳送過來的1100111000逐位相加就會得到一個1,應該注意的的,如果在傳送中1100111000變成為0000111000,通過上面的運算也將得到1,接收方就會認為傳送的數據是正確的,這個判斷正確與否的過程稱為校驗。而使用上面方法進行的校驗稱為奇校驗,奇校驗只能判斷傳送數據中奇數個數據從0變為1或從1變為0的情況,對於傳送中偶數個數據發生錯誤,它就無能為力了。
Odd Parity(奇校驗),校核數據完整性的一種方法,一個字節的8個數據位與校驗位(parity bit )加起來之和有奇數個1。校驗線路在收到數后,通過發生器在校驗位填上0或1,以保證和是奇數個1。因此,校驗位是0時,數據位中應該有奇數個1;而校驗位是1時,數據位應該有偶數個1。如果讀取數據時發現與此規則不符,CPU會下令重新傳輸數據。 奇/偶校驗(ECC)是數據傳送時采用的一種校正數據錯誤的一種方式,分為奇校驗和偶校驗兩種。 如果是采用奇校驗,在傳送每一個字節的時候另外附加一位作為校驗位,當實際數據中“1”的個數為偶數的時候,這個校驗位就是“1”,否則這個校驗位就是“0”,這樣就可以保證傳送數據滿足奇校驗的要求。在接收方收到數據時,將按照奇校驗的要求檢測數據中“1”的個數,如果是奇數,表示傳送正確,否則表示傳送錯誤。 同理偶校驗的過程和奇校驗的過程一樣,只是檢測數據中“1”的個數為偶數。
對數據傳輸正確性的一種校驗方法。在數據傳輸前附加一位奇校驗位,用來表示傳輸的數據中"1"的個數是奇數還是偶數,為奇數時,校驗位置為"0",否則置為"1",用以保持數據的奇偶性不變。例如,需要傳輸"11001110",數據中含5個"1",所以其奇校驗位為"0",同時把"110011100"傳輸給接收方,接收方收到數據后再一次計算奇偶性,"110011100"中仍然含有5個"1",所以接收方計算出的奇校驗位還是"0",與發送方一致,表示在此次傳輸過程中未發生錯誤。
大家一定會問,如何計算奇偶性呢,在計算機內有一種特殊的運算它遵守下面的規則:
1+1=0; 1+0=1; 0+1=1; 0+0=0;我們把傳送過來的1100111000逐位相加就會得到一個1,應該注意的的,如果在傳送中1100111000變成為0000111000,通過上面的運算也將得到1,接收方就會認為傳送的數據是正確的,這個判斷正確與否的過程稱為校驗。而使用上面方法進行的校驗稱為奇校驗,奇校驗只能判斷傳送數據中奇數個數據從0變為1或從1變為0的情況,對於傳送中偶數個數據發生錯誤,它就無能為力了。
Odd Parity(奇校驗),校核數據完整性的一種方法,一個字節的8個數據位與校驗位(parity bit )加起來之和有奇數個1。校驗線路在收到數后,通過發生器在校驗位填上0或1,以保證和是奇數個1。因此,校驗位是0時,數據位中應該有奇數個1;而校驗位是1時,數據位應該有偶數個1。如果讀取數據時發現與此規則不符,CPU會下令重新傳輸數據。 奇/偶校驗(ECC)是數據傳送時采用的一種校正數據錯誤的一種方式,分為奇校驗和偶校驗兩種。 如果是采用奇校驗,在傳送每一個字節的時候另外附加一位作為校驗位,當實際數據中“1”的個數為偶數的時候,這個校驗位就是“1”,否則這個校驗位就是“0”,這樣就可以保證傳送數據滿足奇校驗的要求。在接收方收到數據時,將按照奇校驗的要求檢測數據中“1”的個數,如果是奇數,表示傳送正確,否則表示傳送錯誤。 同理偶校驗的過程和奇校驗的過程一樣,只是檢測數據中“1”的個數為偶數。