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

标签 c# algorithm zxing reed-solomon

我想通过嘈杂的 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/

相关文章:

javascript - MVC5 : Refresh View on button (hyperlink) click?

c# - .NET 数组 - "Length"、 "Count()"和 "Rank"之间的区别

algorithm - 事件选择贪心法(修改)

c - 写递归算法时使用 'static'是作弊吗?

android - 如何创建 EAN13 条形码生成器,将 EAN 作为输入?

c# - 为什么 1 000 000 不等于 1000000.toString ("N", new CultureInfo ("fr-FR"))

c# - 如果缺少数字,Linq 拆分组

java - AES128算法如何生成64位加密 key ?

java - 如何让ZXing在android中的部分 Activity (而不是全屏)中显示?

java - Zxing Maven 编译错误