Python конвертирование из c # Расчет CRC8 из кадра 4/5 байт

1

У меня есть сборка кадра, как это: {0x00, 0x00, 0x00, 0x00, 0x00}.

С# скрипт для расчета 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;
    }

Может кто-нибудь показать мне, как правильно написать в Python?

Теги:
crc

1 ответ

2
Лучший ответ

Сайт, с которым вы связаны, по-видимому, использует тот же алгоритм, что и вы опубликовали. Это достаточно просто, чтобы перевести на 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 объектом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню