我对自己在开发应用程序期间所做的观察很好奇。 长话短说,我正在开发一款可从智能电表读取数据的应用程序。他们的请求框架如下:
7E [hex-address] [crc1] [cmd] [crc2] 7E
CRC的算法是CRC-16 / X-25,它们应计算不含7e
的整个帧的左部分,因此crc2
包括crc1
。我注意到,crc2
的所有时间cmd
始终是相同的,甚至具有不同的hex-address
。
我使用了crccalc工具来确保。重现步骤:
此CRC对于任何字节数组都是相同的。为什么这样?这种现象有什么名字吗?
答案 0 :(得分:1)
再次计算CRC
如果将CRC附加到数据中并再次计算,则结果为常数。如果CRC不是后补(xorout = 0),则结果为零,但在这种情况下,它是后补(xorout = 0xffff),因此结果是非零常量,在这种情况下为0x0f47(假设否)。发生错误)。