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