#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))