您好,登錄后才能下訂單哦!
這篇文章主要介紹“android數據校驗及常用校驗算法是什么”,在日常操作中,相信很多人在android數據校驗及常用校驗算法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”android數據校驗及常用校驗算法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
由于數據傳輸距離的因素影響,計算機和受控設備間的通信數據就常常出現不可預知的錯誤。為了防止這些錯誤所帶來的影響,一般在通信時采取數據校驗方法,而奇偶校驗和循環冗余碼校驗就是其中最常用的校驗算法。
串行數據在傳輸過程中,由于干擾可能引起信息的錯誤,出現“誤碼”。我們把如何發現傳輸中的錯誤,叫“檢碼”;發現錯誤后,如何進行修訂,叫“檢錯”。之前,就有過提示,為了保證數據在傳輸過程中不會出錯,每個數據包后面一般都會加上校驗字節。
校驗過程是發送端(TX端)和接收端(RX端)共同完成的過程。如上圖所示,首先,TX端按照用戶層協議(數據包格式)將數據根據校驗算法計算出TX校驗字節,并將TX校驗字節按照協議放在數據包的指定位置。
RX端接收到數據包后,在指定位置取出TX校驗字節,同時,再將接收到的數據按規定方式計算出RX校驗字節,如果RX校驗字節與接收到的TX校驗字節相等,則說明數據包是有效的,否則就應該放棄該數據包。
最簡單粗暴的方法就是“奇偶校驗”了,即在傳輸字符的各位之外,再傳送一位奇/偶校驗位。可采用的策略分為奇校驗和偶校驗。
所有傳送的位數(含字符的個數位和校驗位)中,“1”的個數為奇數,如1 0110,0101;0 0110,0001。
所有傳送的位數(含字符的各位數和檢驗位)中,“1”的個數為偶數,如1 0100,0101;0 0100,0001。
奇偶校驗能夠檢測出信息傳輸過程中的部分錯誤的數據(一位錯誤的代碼能夠檢出,兩位及以上的錯誤代碼不能檢出)。奇偶檢驗有一個劣勢,就是他只能發現錯誤,而不能糾正錯誤;一旦發現錯誤,那么沒辦法,只能重發。
但是由于奇偶校驗使用起來非常簡單,仍然被廣泛使用。但是仍存在一些良好的矯正錯誤數據的方法,并具有自動訆錯能力,如循環冗余碼(CRC)檢錯等。
異或校驗方法也是非常簡單,而且非常通用,雖然使用該方法校驗后仍存在出錯的可能,但是因為異或算法非常簡單,編程毫不費力,一般新手都用這種方法。
之前介紹過的NMEA-0183無線通信協議是在異或算法基礎之上進行了一定的改進。能夠理解異或運算,并使用好異或校驗算法,會使得數據處理編程變得輕松容易。
檢驗和(checksum),在數據處理和數據通信領域中,用于校驗目的地一組數據項的和。它通常是以十六進制為數制表示的形式。如果校驗和的數值超過十六進制的FF,也就是255。就要求其補碼作為校驗和。通常用來在通信中,尤其是遠距離通信中保證數據的完整性和準確性。
這些數據項可以是數字或在計算檢驗的過程中看作數字的其它字符串。校驗和(checksum)是指傳輸位數的累加,當傳輸結束時,接收者可以根據這個數值判斷是否接到了所有的數據。如果數值匹配,那么說明傳送已經完成。
循環冗余碼校驗(Cyclical Redundancy Check, CRC)
是利用除法和余數的原理來做錯誤偵測(Error Detecting)的。
推薦文章:《CRC校驗原來這么簡單》
實際應用時,發送裝置計算出CRC值并隨數據一同發送給接收裝置RX,RX對收到的數據重新計算CR并與收到的CRC值相比較,若兩個CRC值不同,則說明數據通信出現了錯誤,該數據包應該舍棄不用。
在遠距離數據通訊中,為確保高效而無差錯的傳送數據,必須對數據進行校驗控制,而CRC是對一個傳送數據塊進行校驗,是一種非常高效的差錯控制方法。目前,主流的CRC可以分為以下幾個標準:CRC-12碼;CRC-16碼;CRC-CCITT碼;CRC-32碼。
CRC-12碼通常用來傳送6-bit字符串。CRC-16及CRC-CCITT碼則用來傳送8-bit字符,其中CRC-16為美國采用,而CRC-CCITT為歐洲國家所采用。CRC-32碼用途有限。
在數據存儲和數據通信領域,CRC無處不在:著名的通信協議X.25的FCS(幀檢錯序列)采用的是CRC/CCITT,ARJ/LHA等壓縮工具軟件采用的是CRC32,磁盤驅動器讀寫采用的日式CRC16,通常用到的圖像存儲格式GIF/TIFF等也是采用CRC作為檢錯手段的。
CRC-16碼由兩個字節構成,在開始時CRC寄存器的每一位都預置為1,然后把CRC寄存器與8-bit的數據進行異或,之后對CRC寄存器從高位向低位進行移位,在最高位(MSB)的位置補零,而最低位(LSB,移位后已經被移除CRC寄存器)如果是1,則把寄存器與預定義的多項式碼進行異或,否則如果LSB為零,就無需進行進行異或。
重復上述的由高至低的移位8次,第一個8-bit數據處理完畢,用此時CRC寄存器的值與下一個8-bit數據異或并進行如前一個8-bit數據似的8次移位。所有的字符處理完成后CRC寄存器的值即為最終的CRC值。
下面為CRC的計算過程:
(1)設置CRC寄存器,并給其賦值FFFF(hex);
(2)將數據的第一個8-bit字符與16位CRC寄存器的低8位進行異或,并把結果存入CRC寄存器;
(3)CRC寄存器向右移一位,MSB補零,移出并檢查LSB;
(4)如果LSB為0,重復第三步;若LSB為1,CRC寄存器與多項式碼相異或;
(5)重復第3與第4步直到8次移位全部完成。此時,一個8-bit數據處理完畢;
(6)重復第2至第5步直到所有數據全部處理完成;
(7)最終CRC寄存器的內容即為CRC值。
CRC校驗是一種多項式除法:將需要發送的數據包當做一個很大的二進制數,用它來除以一個固定的二進制數,所得到的余數即是所求得的CRC校驗碼。
到此,關于“android數據校驗及常用校驗算法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。