Преобразование из шестнадцатеричного в двоичный без потери ведущего 0-х python

у меня есть шестнадцатеричное значение в строке

h = '00112233aabbccddee'

Я знаю, что могу преобразовать это в двоичный код:

h = bin(int(h, 16))[2:]

однако это теряет ведущие 0. Есть ли в любом случае, чтобы сделать это преобразование, не теряя 0? Или лучший способ сделать это просто подсчитать количество ведущих 0 до преобразования, а затем добавить его впоследствии.

6 ответов


Я не думаю, что есть способ, чтобы держать эти нули по умолчанию.

каждая шестнадцатеричная цифра переводится в 4 двоичные цифры, поэтому длина новой строки должна быть ровно в 4 раза больше размера оригинала.

h_size = len(h) * 4

затем, вы можете использовать .zfill чтобы заполнить нули до нужного размера:

h = ( bin(int(h, 16))[2:] ).zfill(h_size)

Это на самом деле довольно легко в Python, так как он не имеет ограничения на размер чисел. Просто добавьте'1' в шестнадцатеричную строку и снимите соответствующую '1' из вывода.

>>> h = '00112233aabbccddee'
>>> bin(int(h, 16))[2:]  # old way
'1000100100010001100111010101010111011110011001101110111101110'
>>> bin(int('1'+h, 16))[3:]  # new way
'000000000001000100100010001100111010101010111011110011001101110111101110'

в основном то же самое, но заполнение до 4 bindigits каждый hexdigit

''.join(bin(int(c, 16))[2:].zfill(4) for c in h)

новичок в python, такой как я бы действовал так

datastring = 'HexInFormOfString'  

заполнение для размещения предыдущих нулей, если таковые имеются, когда python преобразует строку в Hex.

datastrPadded = 'ffff' + datastring 

преобразование добавленного значения в двоичное.

databin = bin(int(datastrPadded,16))

удалите 2bits ('0b'), которые python добавляет для обозначения двоичных + 16 бит .

databinCrop = databin[18:]

это преобразует шестнадцатеричную строку в бинарную строку. Поскольку вы хотите, чтобы длина зависела от оригинала, это может быть то, что вы хотите.

data = ""
while len(h) > 0:
    data = data + chr(int(h[0:2], 16))
    h = h[2:]
print h

hexa = '91278c4bfb3cbb95ffddc668d995bfe0'
binary = bin(int(hexa, 16))[2:]
print binary
hexa_dec = hex(int(binary, 2))[2:]
print hexa_dec