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
.
我有一些技术文档并尝试在 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
.