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

Python从c#转换为从4/5字节帧计算CRC8,c#,python,c,crc,C#,Python,C,Crc,我有这样一个框架构建:{0x00,0x00,0x00,0x00,0x00} C#用于计算crc8的脚本 u8 Crc(u8 *buffer, u8 length) { u8 crc = 0, idx; while ( length-- != 0 ) { crc = crc ^ *buffer++; for ( idx = 0; idx < 8; ++idx )

我有这样一个框架构建:{0x00,0x00,0x00,0x00,0x00}

C#用于计算crc8的脚本

   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;
    }
u8 Crc(u8*缓冲区,u8长度)
{
u8 crc=0,idx;
while(长度--!=0)
{
crc=crc^*缓冲++;
对于(idx=0;idx<8;++idx)
{
如果(crc&0x01)crc=(crc>>1)^0x8C;
否则crc>>=1;
}
}
返回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
对象,此代码也能正常工作。

Tkinter内容与CRC计算无关。您从哪里获得此crc8算法的?位移位方向和多项式似乎很奇怪。