![](/img/trans.png)
[英]The return value should be a list but doesn't return as expected?! - Python newbie
[英]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.