我想通过嘈杂的通道传输二进制数据。
我读到一个检测错误的好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);
请向我解释编码器和解码器的输入。
答案 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数组(加上用于纠错码的空间)通过编码器,然后重新转换为(较大的)字节数组。反之亦然。