資料結構演算法:CRC32演算法實現原理
簡而言之,CRC是一個數值。該數值被用於校驗資料的正確性。CRC數值簡單地說就是透過讓你需要做處理的資料除以一個常數而得到的餘數。當你得到這個數值後你可以將這個數值附加到你的資料後,當資料被傳送到其他地方後,取出原始資料(可能在傳送過程中被破壞)與附加的CRC數值,然後將這裡的原始資料除以之前那個常數(約定好的)然後得到新的CRC值。比較兩個CRC值是否相等即可確認你的資料是否在傳送過程中出現錯誤。
那麼,如何讓你的資料除以一個常數?方法是對你的資料進行必要的編碼處理,逐位元組處理成數字。
那麼這個常數是什麼?你不必關注它是什麼,也不需要關注它是如何獲得的。當你真的要動手寫一個CRC的實現演算法時,我可以告訴你,CRC的理論學家會告訴你。不同長度的常數對應著不同的CRC實現演算法。當這個常數為32位時,也就是這裡所說的CRC32。
以上內容你不必全部理解,因為你需要查閱其他資料來獲取CRC完整的理論介紹。
ThemathematicsbehindCRC?
很多教科書會把CRC與多項式關聯起來。這裡的多項式指的是係數為0或1的式子,例如:a0+a1*x+a2*x^2+...+an*x^n。其中a0,a1,...,an要麼為0要麼為1。我們並不關注x取什麼值。
(如果你要關注,你可以簡單地認為x為2)這裡把a0,a1,...,an的值取出來排列起來,就可以表示位元流。
資料結構演算法:CRC32演算法實現原理
簡而言之,CRC是一個數值。該數值被用於校驗資料的正確性。CRC數值簡單地說就是透過讓你需要做處理的資料除以一個常數而得到的餘數。當你得到這個數值後你可以將這個數值附加到你的資料後,當資料被傳送到其他地方後,取出原始資料(可能在傳送過程中被破壞)與附加的CRC數值,然後將這裡的原始資料除以之前那個常數(約定好的)然後得到新的CRC值。比較兩個CRC值是否相等即可確認你的資料是否在傳送過程中出現錯誤。
那麼,如何讓你的資料除以一個常數?方法是對你的資料進行必要的編碼處理,逐位元組處理成數字。
那麼這個常數是什麼?你不必關注它是什麼,也不需要關注它是如何獲得的。當你真的要動手寫一個CRC的實現演算法時,我可以告訴你,CRC的理論學家會告訴你。不同長度的常數對應著不同的CRC實現演算法。當這個常數為32位時,也就是這裡所說的CRC32。
以上內容你不必全部理解,因為你需要查閱其他資料來獲取CRC完整的理論介紹。
ThemathematicsbehindCRC?
很多教科書會把CRC與多項式關聯起來。這裡的多項式指的是係數為0或1的式子,例如:a0+a1*x+a2*x^2+...+an*x^n。其中a0,a1,...,an要麼為0要麼為1。我們並不關注x取什麼值。
(如果你要關注,你可以簡單地認為x為2)這裡把a0,a1,...,an的值取出來排列起來,就可以表示位元流。