Python从c#转换为从4/5字节帧计算CRC8
我有这样一个框架构建:{0x00,0x00,0x00,0x00,0x00} C#用于计算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 )
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算法的?位移位方向和多项式似乎很奇怪。