У меня есть bytearray следующим образом:
frame = bytearray()
frame.append(0x6)
frame.append(0x8)
frame.append(0xf1)
frame.append(0x1b)
frame.append(0x3)
frame.append(0x2)
frame.append(0x1)
frame.append(0x0)
frame.append(0x0)
frame.append(0x0)
Я применяю CRC для всех байтов кадра:
seed = 0xB7D2
POLY = 0x8408
class CanCRC:
def __init__(self, value=0):
self.value = value
def update(self, char: bytes, crcres):
for b in range(8):
if ((crcres & 0x0001) ^ (char & 0x0001) == 0x0001):
crcres = crcres >> 1
crcres ^= POLY
else:
crcres = crcres >> 1
char = char >> 1
return crcres
can = CanCRC(value=seed)
for i in range(0, len(frame)):
can.value = can.update(frame[i], can.value)
frame.extend((can.value).to_bytes(2, byteorder='little'))
print(hex(can.value))
print(frame)
Конечное значение CRC равно 0xcc30, но при добавлении в байтовый массив массив показывает:
bytearray(b'\x06\x08\xf1\x1b\x03\x02\x01\x00\x00\x000\xcc')
С чего бы это? Я получаю \x000\xcc
вместо \x30\xcc
Я заметил, что это происходит и с другими байтами в массиве ... он неправильно кодирует или что-то в этом роде ...
Любая помощь приветствуется