我有一个这样的帧构建:{0x00,0x00,0x00,0x00,0x00}。
计算crc8的C脚本
u8 Crc(u8 *buffer, u8 length)
{
u8 crc = 0, idx;
while ( length-- != 0 )
{
crc = crc ^ *buffer++;
for ( idx = 0; idx < 8; ++idx )
{
if ( crc & 0x01 ) crc = (crc >> 1) ^ 0x8C;
else crc >>= 1;
}
}
return crc;
}
有人能教我如何用Python正确地编写它吗?
最佳答案
您链接的网站似乎使用了与您所发布内容相同的算法。很容易翻译成Python,所有的比特旋转代码都保持不变,您只需要更改在输入缓冲区上循环的代码。
def crc8(buff):
crc = 0
for b in buff:
crc ^= b
for i in range(8):
if crc & 1:
crc = (crc >> 1) ^ 0x8C
else:
crc >>= 1
return crc
buff = [0x12, 0xAB, 0x34]
crc = crc8(buff)
print(hex(crc))
输出
0x17
如果
buff
是bytes
或bytearray
对象,则此代码也可以正常工作。关于c# - Python从C#转换从4/5字节帧计算CRC8,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50874135/