【问题标题】:Message parity check [closed]消息奇偶校验[关闭]
【发布时间】:2011-10-24 01:40:52
【问题描述】:

有人可以帮我在 C# 中实现这个计算序列吗?

【问题讨论】:

  • 这是你的作业吗?
  • @redfrogsbinary 所以,您只想解释发生了什么——也就是说,问题的详细信息而不是答案?不要犹豫,编辑您的问题,说明如果是这种情况。很难从您现在的问题中猜测,此外,SO 回答者通常对似乎以最小的努力“外包”(家庭)工作的问题持谨慎态度。
  • 仅供参考,这是摘自 diseqc.org.ua/projects/hard/adsb/…(航空电信 - 监视雷达和防撞系统)。
  • 奇偶校验的描述非常清晰。
  • @Danra:这不是简单的奇偶校验,而是 CRC。

标签: c# binary crc algebra polynomial-math


【解决方案1】:

这个问题本质上描述了一个 24 位多项式的 CRC。

您可以简单地使用移位和异或运算以及 24 位(或更大)变量来解决问题;不需要 bigint。

推荐的入门读物:

【讨论】:

    【解决方案2】:

    我借此机会涉足这一点。在软件实现的上下文中解释方程是棘手的,因为有很多方法可以将多项式映射到内存中的数据结构 - 而且,我假设,您会希望您生成的解决方案能够无缝地互操作其他实现。在这种情况下,您的字节顺序是 MSB 还是 LSB 很重要……如果您将不是 8 的倍数的位串向左或向右对齐,这也很重要。值得注意的是,多项式以 X 的升幂表示——而人们可能会假设,因为字节中最左边的位具有最大索引,最左边的位应该对应于 X 的最大幂——但这不是惯例使用。

    本质上,使用生成多项式计算 CRC 有两种截然不同的方法。第一个也是效率最低的方法是使用任意精度的算术和模数 - 正如发布的摘录所暗示的那样。更快的方法涉及多项式和异或的连续应用。

    可以在此处找到 Pascal 中的实现:http://jetvision.de/sbs/adsb/crc.htm - 转换为 C# 应该很简单。

    更直接的方法可能涉及将消息和生成多项式编码为 System.Numerics.BigInteger 对象(使用 C#/.Net 4.0)并完全按照上面的文本建议计算奇偶校验位 - 通过找到消息以多项式为模- 只需在适当编码的 BigInteger 上使用“%”运算符。这里唯一的挑战是将您的消息和奇偶校验位转换为适合您的应用程序的格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-29
      • 2013-06-25
      • 1970-01-01
      • 2018-01-23
      • 2013-01-26
      • 2013-04-21
      • 2019-05-10
      • 1970-01-01
      相关资源
      最近更新 更多