Python bin() и начальные нули

#python #python-3.x #bit-manipulation

Вопрос:

Начиная с Python 3 начальные нули исключаются при bin() преобразовании.

Я пытаюсь манипулировать значением и переставлять биты, чтобы декодировать смещение, но после преобразования я теряю начальные нули из значения.

Какой был бы лучший способ сделать это без потери ведущих нулей?

Вот код :

 bytefeed = 0x0229  # which becomes 0x2902

def decodebytes(bytefeed, negative = True):

    rearrangedbits = list()
    reversed_dat.extend([bytefeed[1], bytefeed[0]])
    reversed_datdec = int.from_bytes(reversed_dat, byteorder='big', signed=False)
    bitfield2 = list(bin(reversed_datdec)[2:])
    rearrangedbits  = bitfield2[4:10]
    rearrangedbits  = bitfield2[0:4]
    rearrangedbits  = bitfield2[10:17]
    bitfieldec2 = int("".join(map(str, rearrangedbits)),2)
    decovaroffset = finaloffset - bitfieldec2

    print(bitfield2)
    return decovaroffset
 

результатом работы bitfield2 является :

 ['1', '0', '1', '0', '0', '1', '0', '0', '0', '0', '0', '0', '1', '0']
 

Должно быть :

 ['0', '0', '1', '0', '1', '0', '0', '1', '0', '0', '0', '0', '0', '0', '1', '0']
 

zfill() это не вариант здесь, так как заполнение повлияет на смещение, если переменные не имеют начального нуля.

Комментарии:

1. Что вы подразумеваете под «заполнение повлияет на смещение, если переменные не имеют начального нуля»?

2. каждый раз, когда bytefeed изменяется с не ведущим значением 0, не будет ли это смещать полное значение? var не является константой .. был определен как константа только для публикации проблемы

Ответ №1:

похоже, это zfill() устраняет проблему со списком, поскольку ранее я неправильно понимал использование..

так

 bitfield2 = list(bin(reversed_datdec)[2:])
 

должно быть

 bitfield2 = list(bin(reversed_datdec)[2:].zfill(16))