2015-11-18 93 views
0

我一直在尋找一個CRC32算法,但我發現只是給了我Checksum算法。我想要的是一個CRC32算法,它發送數據位,檢查並糾正它們。例如:CRC32校正算法C

User input: "A" { 01000001 } 
I intentionally cause an error so data sent is: "C" { 01000011 } 

有C中的算法,可以使校正,從而"C"能修正爲"A"?我只是覺得「CRC32校驗」,但沒有關於修正,我真的不明白怎麼做了

回答

1

CRC是錯誤檢測代碼,但它並沒有提供足夠的信息讓你告訴位有錯誤。

(mcdowella在評論中說得很好):對於短消息,您可能會認爲單比特錯誤是最有可能的。你可以蠻力地嘗試每一個單獨的位,看看你是否通過翻轉那一點來獲得正確的CRC。但是,一些多位錯誤將導致此方法找到與原始錯誤消息具有相同CRC的錯誤消息。


爲此,您需要一個錯誤糾正碼。您可以使用錯誤檢測代碼(如CRC或更強大的哈希)來檢測輸入的哪些部分被「擦除」,但是您會使用擦除代碼從良好數據和冗餘塊中重新生成錯誤數據。

例如參見PAR2以獲得用於文件的完整端對端系統,包括文件格式。它使用裏德 - 所羅門與GaloisField < 2^16>進行糾錯。

+0

我需要澄清。謝謝! :3 –

+2

例如,短消息中的單比特錯誤可能能夠使用綜合症解碼。 CRC32是線性的,因此您可以計算全零消息產生的校驗和與每個消息產生的校驗和之間的差異,只需設置一個位。如果這些差異中的任何一個與接收到的消息中觀察到的和期望的校驗和之間的差異相匹配,則假設相應的單個位位置與錯誤匹配是合理的。 – mcdowella