преобразовать / перепаковать 16 байт / байтовый массив с 1 значащим битом в байт со всеми значимыми битами в python3 - PullRequest
0 голосов
/ 23 декабря 2018

Как я могу перепаковать 8 байт или байтовый массив с 1 значащим битом в байт с шестнадцатеричным значением в python3, например:

  bytearray = [b'\x01', b'\x01', b'\x01', b'\x01',
               b'\x01', b'\x01', b'\x01', b'\x01']

преобразуется в:

byte = b'\ff\

1 Ответ

0 голосов
/ 23 декабря 2018

Вы можете сделать это следующим образом:

bits = [b'\x01', b'\x00', b'\x01', b'\x01',
        b'\x01', b'\x01', b'\x01', b'\x00']  # 1011 1110 -> 0xbe

int_val = sum(bit[0] << 7-i for i, bit in enumerate(bits))
byte = bytes([int_val])
print(byte)
# b'\xbe'

Поскольку bytes объекты ведут себя как последовательности целых чисел, мы получаем:

b'\x01`[0]
# 1

Смещаем битовые значения влево: для первого в списке i будет 0, поэтому оно сдвигается на 7 позиций и так далее.Затем мы суммируем эти значения, чтобы получить числовое значение вашего байта.

bytes() принимает последовательности целых чисел, поэтому мы передаем ему список с нашим байтовым значением в качестве единственного элемента.

...