有人能帮我在C#中实现这一系列的计算吗?

发布于 2011-09-24 23:50:43
这个问题本质上描述了一个具有24位多项式的CRC。
只需使用shift和XOR操作和一个24位(或更大)的变量即可解决此问题;不需要bigint。
推荐入门读物:
发布于 2011-09-24 23:46:36
我借此机会对此进行了涉猎。在软件实现的上下文中解释方程是很棘手的,因为有许多方法可以将多项式映射到内存中的数据结构-我假设,您会希望您产生的解决方案与其他实现无缝互操作。在这种情况下,重要的是你的字节排序是MSB还是LSB优先...如果向左或向右对齐的位串不是8的倍数,这也很重要。值得注意的是,多项式是用X的升幂表示的-而人们可能会假设,因为字节中最左边的位具有最大索引,所以最左边的位应该对应于X的最大幂-但这不是使用的惯例。
本质上,有两种非常不同的方法来使用生成器多项式来计算CRC。第一种,也是效率最低的一种,是使用任意精度的算术和模运算--正如文章摘录所建议的那样。一种更快的方法涉及多项式和异或的连续应用。
在这里可以找到Pascal的一个实现:从http://jetvision.de/sbs/adsb/crc.htm到C#的转换应该很简单。
一种更直接的方法可能涉及将消息和生成器多项式编码为System.Numerics.BigInteger对象(使用C#/.NET4.0),并根据上面的文本精确地计算奇偶校验位-通过找到以多项式为模的消息-只需在适当编码的BigIntegers上使用"%“运算符。这里唯一的挑战是将消息和奇偶校验位转换为适合您应用程序的格式,或将其转换为适合您的应用程序的格式。
https://stackoverflow.com/questions/7010989
复制相似问题