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

标签 c# algorithm zxing reed-solomon

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

相关文章:

c# - 长时间使用的 COM 对象

c# - 获取 FrameworkElement 边界矩形的坐标

c# - 单独实现编程设计

algorithm - AND、OR 或 XOR 汇编语言 MASM X86 IRVINE

ios - 使用 ZXing Xamarin for iOS 的条码扫描仪应用程序在应用程序类中遇到空引用错误

c# - SetupSet() 已过时。代替什么?

PHP Reddit 排名算法 - 计算排名

algorithm - 给定二部图时使用斐波那契堆或二叉堆的 prim 算法的时间复杂度

android - 无法解决 Zxing 依赖项

android - 需要帮助使用 ZXing 在 android 中将文本编码为二维码