纯python reed solomon编解码器
reedsolo的Python项目详细描述
纯PythonReed Solomon 编码器/解码器,基于 wikiversity, 由“bobmath”写的。
我只合并了一点代码,添加了异常和一个简单的api。 据我所知,该算法最多可以纠正 消息,其中nsym是纠错码(ecc)中的字节数。 代码应该可以在任何合理版本的python(2.4-3.2)上运行, 但我只是在测试2.6-3.2。
注意
我不要求代码的作者,也不对代码的正确性负责 算法的。对我来说,有限域代数太多了:)
我已经发布了这个包,因为我需要一个ecc编解码器为另一个项目,我正在工作, 我在网上找不到任何东西(仍然有效)。
算法本身可以处理多达255字节的消息,包括ecc字节。这个 RSCodec类将把较长的消息分成块,分别进行编码/解码; 从api的角度来看,这不应该有什么不同。
>>> rs = RSCodec(10) >>> rs.encode([1,2,3,4]) b'\x01\x02\x03\x04,\x9d\x1c+=\xf8h\xfa\x98M' >>> rs.encode(b'hello world') b'hello world\xed%T\xc4\xfd\xfd\x89\xf3\xa8\xaa' >>> rs.decode(b'hello world\xed%T\xc4\xfd\xfd\x89\xf3\xa8\xaa') b'hello world' >>> rs.decode(b'heXlo worXd\xed%T\xc4\xfdX\x89\xf3\xa8\xaa') # 3 errors b'hello world' >>> rs.decode(b'hXXXo worXd\xed%T\xc4\xfdX\x89\xf3\xa8\xaa') # 5 errors b'hello world' >>> rs.decode(b'hXXXo worXd\xed%T\xc4\xfdXX\xf3\xa8\xaa') # 6 errors - fail Traceback (most recent call last): ... ReedSolomonError: Could not locate error >>> rs = RSCodec(12) >>> rs.encode(b'hello world') b'hello world?Ay\xb2\xbc\xdc\x01q\xb9\xe3\xe2=' >>> rs.decode(b'hello worXXXXy\xb2XX\x01q\xb9\xe3\xe2=') # 6 errors - ok b'hello world'