2016-08-05 111 views
0

我想发送数据到TCP 105电路。如何解决CRC(循环冗余校验)计算?

以下十六进制命令行发送数据123:

7F30001103 313233 45D4

这里,313233是123十六进制表示和45D4是CRC值。

我在计算CRC后得到这个45D4的问题。在网上搜索了很长时间之后,我得到了不同标准中的其他CRC值。但是这些CRC值不被我的LED显示电路所接受。

请帮我了解如何从7F30001103313233获得45D4。

在此先感谢。

+0

我用8字节的方法得到'0x9A8F'。你应该计算8字节的CRC还是只有一个subsdet?即使使用相同的算法,CRC依赖于您正在使用的多项式。 CRC逆转,这是一个棘手的! –

+0

我已经用0x9A8F测试过,但没有成功。可能是它的CRC-16。 CRC逆转将是D445而不是45D4。 –

回答

0

该命令匹配称为CRC-16/CMS的算法。

$ reveng -w 16 -s 7f30001103313233d445 
width=16 poly=0x8005 init=0xffff refin=false refout=false xorout=0x0000 ch 
eck=0xaee7 name="CRC-16/CMS" 

这是可能正确的算法,因为你只给一个码字(因为我假设CRC已经字节交换。)

要生成的代码计算这个CRC,例如参见Mark Adler的crcany工具。

+0

感谢这么好的回复Regregex。我希望这会起作用,我会尝试。 –