我想通过嘈杂的 channel 传输二进制数据。
我读到 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);
请向我解释一下编码器和解码器的输入。
最佳答案
这是您在这里使用的实现吗: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/24578536/