繁体   English   中英

CRC 不返回预期值

[英]CRC doesn't return expected value

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

这是文档:

在此处输入图像描述

这是我的代码:

data1 = b'\0x01\0x04\0x00\0x0b\0x00\0x01'
data2 = b'\0x01\0x03\0x00\0x65\0x00\0x01'


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' 您编写的第一个字符串有'\0' (一个 null 字符),然后是文字字符'x04' ,依此类推。 您可以通过打印字符串来检查这一点。

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

作为一个小提示,您的data参数的类型信息说它需要一个bytearray但您实际上是在传递它bytes

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM