我一直在寻找CRC32算法,但我找到的只是给我Checksum算法。我想要的是CRC32算法,它发送数据位,检查并纠正它们。例如:
User input: "A" { 01000001 }
I intentionally cause an error so data sent is: "C" { 01000011 }
C中是否有可以进行校正的算法,因此"C"
可以更正为"A"
?我只是找到" CRC32 Checksum",但没有任何关于纠正的内容,我真的不明白该怎么做
答案 0 :(得分:1)
CRC是一种错误检测代码,但它没有提供足够的信息让您告诉哪个位有错误。
(mcdowella在评论中提出了一个很好的观点):对于短消息,您可能会认为最有可能出现单位错误。你可以蛮力地分别尝试每一位,看看你是否通过翻转那个位来获得正确的CRC。但是,一些多位错误会导致此方法找到与原始CRC具有相同CRC的错误消息。
为此你需要一个纠错码。您可以检测输入的哪些部分被删除"使用错误检测代码,如CRC或更强的哈希值,然后使用擦除代码从良好数据和冗余块重新生成错误数据。
请参阅示例PAR2,了解完整的文件端到端系统,包括文件格式。它使用具有GaloisField< 2 ^ 16>的Reed-Solomon。纠错。