有人可以帮我在 C# 中实现这个计算序列吗?
2 回答
这个问题本质上描述了一个 24 位多项式的 CRC。
您可以简单地使用移位和异或运算以及 24 位(或更大)变量来解决问题;不需要大整数。
推荐的入门读物:
我借此机会涉足这一点。在软件实现的上下文中解释方程是棘手的,因为有很多方法可以将多项式映射到内存中的数据结构 - 而且,我假设,您会希望您生成的解决方案能够无缝地互操作其他实现。在这种情况下,您的字节顺序是 MSB 还是 LSB 很重要......如果您将不是 8 的倍数的位串向左或向右对齐也很重要。值得注意的是,多项式以 X 的升幂表示——而人们可能会假设,因为字节中最左边的位具有最大索引,最左边的位应该对应于 X 的最大幂——但这不是惯例采用。
本质上,使用生成多项式计算 CRC 有两种截然不同的方法。第一个也是效率最低的方法是使用任意精度的算术和模数 - 正如发布的摘录所暗示的那样。一种更快的方法涉及多项式和异或的连续应用。
可以在此处找到 Pascal 中的实现:http: //jetvision.de/sbs/adsb/crc.htm - 转换为 C# 应该证明是微不足道的。
更直接的方法可能涉及将消息和生成多项式编码为 System.Numerics.BigInteger 对象(使用 C#/.Net 4.0),并完全按照上面的文本建议计算奇偶校验位 - 通过找到消息以多项式为模 - 只需使用适当编码的 BigInteger 上的“%”运算符。这里唯一的挑战是将您的消息和奇偶校验位转换为/从适合您的应用程序的格式。