小编典典

如何在C#中使用Zxing应用Reed-Solomon算法

algorithm

我想在嘈杂的通道上传输二进制数据。

我读到Reed-Solomon是检测错误的一种很好的ECC算法。问题是我不了解此算法的输入。

这是我对zxing.net的幼稚失败尝试:

int[] toEncode = { 123,232,432};
var gf = GenericGF.AZTEC_DATA_12;
ReedSolomonEncoder rse = new ReedSolomonEncoder(gf);
rse.encode(toEncode, 2);

ReedSolomonDecoder rsd = new ReedSolomonDecoder(gf);
rse.encode(toEncode, 2);

请向我解释编码器和解码器的输入。


阅读 494

收藏
2020-07-28

共1个答案

小编典典

这是您在此处使用的实现:ReedSolomonEncoder.cs吗?

如果是这样,要用M个数据校正整数编码N个整数,则需要传递长度为N + M的数组。您的数据应该在前N个索引中,并且代码看起来要在最后M个条目的末尾添加。

另外,请注意编码器中的以下限制:

更新:此处是更新版本:http:
//zxingnet.codeplex.com/。它的ReedSolomonEncoder.cs的最新版本没有此限制。

此类实现在处理QR码时使用的Reed-
Solomon编码方案。里德所罗门编码的简短描述在这里:里德所罗门编码

编码选择为“
QR_CODE_FIELD_256”(这可能对您来说是一个合理的选择),意味着将在消息的字节大小的块(“符号”)上生成纠错码,这意味着最大消息长度(要编码的数据加上错误纠正代码)的长度为255个字节。如果您要发送更多数据,则需要将其分成多个块。

更新2:使用QR_CODE_FIELD_256,您的整数也必须介于0到255之间,因此要编码常规字节流,您需要将每个字节放入整数数组中的单独整数中,传递int数组(加上错误空间)校正码),然后再转换为(更大)字节数组。反之则为解码。

2020-07-28