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