кодирование bytearray, данные искажены - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть 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

Я заметил, что это происходит и с другими байтами в массиве ... он неправильно кодирует или что-то в этом роде ...

Любая помощь приветствуется

...