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

时间:2014-07-04 17:03:59

标签: c# algorithm zxing reed-solomon

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

我读到一个检测错误的好ECC算法是Reed-Solomon。 问题是我不理解这个算法的输入。

这是我对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);

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

1 个答案:

答案 0 :(得分:2)

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

如果是这样,要使用M个数据校正整数对N个整数进行编码,则需要传递长度为N + M的数组。您的数据应位于前N个索引中,并且代码最终将添加到最终M个条目中。

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

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

此类实现在处理QR codes时使用的Reed-Solomon编码方案。 Reed Solomon编码的简要描述如下:Reed-Solomon Codes

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

更新2:使用QR_CODE_FIELD_256,你的整数也需要在0到255之间,所以要编码一般字节流,你需要将每个字节放入整数数组中的一个单独的整数,传递int数组(加上用于纠错码的空间)通过编码器,然后重新转换为(较大的)字节数组。反之亦然。