crc 16 delphi 算法!

来源:百度知道 编辑:UC知道 时间:2024/05/21 21:32:11
我正在用delphi 做一个串口通信程序,遇到了crc16校验的问题,兄弟我搞不定!求救了!
真心感谢!
在我们的程序要求中有这么一段话,请看看:
2.5循环冗余校验(CRC)计算方法:
CRC占用两个字节,其值由传送设备计算出来,然后附加到数据码的最后一并发出,接收设备在接收到数据后,重新计算除去CRC码外其余有效的数据的校验码,然后和所接收到的CRC校验码进行比较,如果这两个值不相等,则数据传输发生了错误。
生成一个CRC校验码的流程:
1. 预置一个16位寄存器为0FFFFH,称之为CRC寄存器。
2. 把数据包中的第一个字节数据与CRC寄存器中的低字节进行异或运算,结果返回CRC寄存器。
3. 将CRC寄存器向右移一位,最高位填以0,最低位移出并检测。
4. 如果最低位为0:重复第三步(下一次移位)。
如果最低位为1:将CRC寄存器与A001H进行异或运算。
5. 重复第3,第4步,直到移完8次。
6. 重复第2步到第5步来处理下一个字节数据,直到所有的数据字节处理完 毕。
7. 交换CRC寄存器的高低字节(低字节在前,高字节在后)。
8. 最终CRC寄存器的值就是CRC的值。

比如:我要发送 02 03 0006 0007 这一组数,程序说明文档中举的例子的crc16校验的结果是:E43A, 可是我怎么做,也搞不出这个结果来!

为什么不在网上找一下呢?CRC一般常用的有查表法。以前我做一个串口传输入程序的时候,就是在网上找的源代码。然后自己稍稍改了一下就OK了。
如果是用计算法的话,说老实话,我也不太明白。呵呵。不过真正应用的时候,重要的是结果。

同求代码