代码之家  ›  专栏  ›  技术社区  ›  vakacjus

从c转换python从4/5字节帧计算crc8

  •  1
  • vakacjus  · 技术社区  · 6 年前

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

    要计算的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正确地编写它吗?

    1 回复  |  直到 5 年前
        1
  •  2
  •   PM 2Ring    6 年前

    您链接的网站似乎使用了与您所发布内容相同的算法。很容易翻译成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 对象。