CRC 没有 return 期望值

CRC doesn't return expected value

我有一些技术文档并尝试在 python 中复制给定的 CRC 算法。但是我没有得到正确的结果。我该如何调整我的算法以匹配文档?

这是文档:

这是我的代码:

data1 = b'[=11=]x01[=11=]x04[=11=]x00[=11=]x0b[=11=]x00[=11=]x01'
data2 = b'[=11=]x01[=11=]x03[=11=]x00[=11=]x65[=11=]x00[=11=]x01'


def crc16(data : bytearray):
    length = len(data)
    crc = 0xffff
    for i in range(0, length):
        crc ^= data[i]
        for j in range(0,8):
            if (crc & 0x01):
                crc =(crc >> 1) ^ 0xa001
            else:
                crc = crc >> 1
    return crc

print(crc16(data1).to_bytes(2, 'big'))
print(crc16(data2).to_bytes(2, 'big'))

以下是文档的一些示例:

这是我的结果:

b'\xc9Y'
b'\xd4\xd1'

您输入的数据有误。例如,第一个应该是 b'\x01\x04\x00\x0b\x00\x01'。您编写的第一个字符串具有 '[=11=]'(空字符),然后是文字字符 'x04',依此类推。您可以通过打印字符串来检查这一点。

更正此问题后,您的代码似乎会给出正确的结果。

需要注意的是,data 参数的类型信息说它需要一个 bytearray 但实际上您传递的是 bytes.