Python 从 c# 转换从 4/5 字节帧计算 CRC8

Python converting from c# Calculating CRC8 from 4/5 bytes frame

我有一个这样的框架构建:{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

如果 buffbytesbytearray 对象,此代码也能正常工作。