Python crc_hqx(data,value)正确实现

时间:2018-09-05 19:11:18

标签: python crc binascii

解决了!谢谢rcgdlr。

我只是在学习CRC,不确定我的实现是否正确。我有很多问题:

  1. 我是否将crc包括在数据部分中(我相信可以,但是不确定;这取决于实现方式吗?)

bytes_trans = cmd_in [5:-2]#-2包括inc crc或-4到excl crc?

  1. 如何确定我的初始值?我在网上看到的大多数实现都使用0或通过了crc本身。我尝试了以下两种方法:

    crc_start = int.from_bytes(cmd_in [-4:-2],byteorder ='little',signed = False)#消息中的CRC

    crc = binascii.crc_hqx(bytes_trans,crc_start)

    crc2 = binascii.crc_hqx(bytes_trans,0)

  2. 我怎么知道它什么时候起作用?我相信我要寻找的是0还是匹配CRC的整数?

  3. 到目前为止,我还没有获得成功,这表明我使用了错误的输入,或者CRC实际上不是我正在使用的文档中指定的CCITT CRC-16。我已经尝试了大多数PyCRC实现,例如DNP和Kermit也没有运气。有没有办法确认我确实在使用CCITT CRC-16?是否有可能会因实施方式有所不同而使CCITT CRC-16稍加修改?

1 个答案:

答案 0 :(得分:0)

通常在数据后附加CRC,最高有效字节在前。

初始值取决于特定的实现。对于16位CRC,两个最常见的值为0x0000或0xffff。在某些情况下,将使用其他值,其中最常见的值将等于初始值0x0000,并以两个字节数据串0xff,0xff的CRC值生成,就好像数据以两个字节模式0xff作为前缀,0xff。

要检查您的CRC实施情况,可以将其与以下网站中的CRC之一进行比较:

https://www.lammertbies.nl/comm/info/crc-calculation.html

使用十六进制输入选项更加灵活。比较实现时,在网站输入框中输入数据时,请勿将计算出的CRC附加到数据中。