CRC32校正算法C

CRC32 correction algorithm C

我一直在寻找 CRC32 算法,但我找到的只是给我 Checksum 算法。我想要的是一个 CRC32 算法,它发送数据位,检查并纠正它们。例如:

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

C 中有没有算法可以将 "C" 更正为 "A" ?我刚找到 "CRC32 Checksum",但没有关于更正的内容,我也不太明白该怎么做

CRC 是一个错误检测代码,但它没有提供足够的信息让您告诉哪个 位有错误。

(mcdowella 在评论中提出了一个很好的观点):对于短消息,您可能会认为单位错误是最有可能的。您可以分别对每一位进行暴力尝试,以查看是否通过翻转该位来获得正确的 CRC。不过,一些多位错误会导致此方法找到与原始 CRC 具有相同 CRC 的错误消息。


为此你需要一个纠错码。您使用错误检测代码(如 CRC 或更强的哈希)检测输入的哪些部分 "erased",然后使用纠删码从好数据和冗余块中重新生成坏数据。

参见 PAR2 的完整端到端文件系统示例,包括文件格式。它使用带有 GaloisField<2^16> 的 Reed-Solomon 进行纠错。