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

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

h = '00112233aabbccddee'

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

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

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

Ответ 1

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

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

h_size = len(h) * 4

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

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

Ответ 2

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

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

Ответ 3

В основном то же самое, но отступы до 4 bindigits each hexdigit

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

Ответ 4

Новичок в python, например, я бы сделал так

datastring = 'HexInFormOfString'  

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

datastrPadded = 'ffff' + datastring 

Преобразовать добавленное значение в двоичное.

databin = bin(int(datastrPadded,16))

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

databinCrop = databin[18:]

Ответ 5

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

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

Ответ 6

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

Ответ 7

Мне нужно было целое число в качестве входных данных и чистые строки hex/bin с префиксами '0b' и '0x', поэтому мое общее решение таково:

def pure_bin(data, no_of_bits=NO_OF_BITS):
    data = data + 2**(no_of_bits)
    return bin(data)[3:]

def pure_hex(data, no_of_bits=NO_OF_BITS):
    if (no_of_bits%4) != 0:
        no_of_bits = 4*int(no_of_bits / 4) + 4
    data = data + 2**(no_of_bits)
    return hex(data)[3:]