我想通过嘈杂的 channel 传输二进制数据。
我读到一个很好的检测错误的 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);
请向我解释编码器和解码器的输入。
最佳答案
这是您在这里使用的实现吗:ReedSolomonEncoder.cs ?
如果是这样,要用 M 个数据校正整数对 N 个整数进行编码,您需要传递一个长度为 N+M 的数组。您的数据应该在前 N 个索引中,代码看起来会添加在最后 M 个条目的末尾。
此外,请注意编码器中的以下限制:
更新:最新版本在这里:http://zxingnet.codeplex.com/ .它的最新版本 ReedSolomonEncoder.cs没有这个限制。
此类实现处理中使用的 Reed-Solomon 编码方案 QR codes . Reed Solomon 编码的简要说明如下:Reed-Solomon Codes .
“QR_CODE_FIELD_256”的编码选择(这对您来说可能是一个合理的选择)意味着纠错码是在您的消息的字节大小的 block (“符号”)上生成的,这意味着您的最大消息长度(数据编码加上纠错码)是 255 字节长。如果您要发送更多数据,则需要将其分成 block 。
更新 2:使用 QR_CODE_FIELD_256,你的整数也需要在 0 到 255 之间,所以要编码一个通用的字节流,你需要将每个字节放入整数数组中的一个单独的整数中,传递 int 数组(加上纠错码的空间)通过编码器,然后重新转换为(更大的)字节数组。解码则相反。
关于c# - 如何在 C# 中使用 zxing 应用 Reed-Solomon 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11642875/