Преобразование из шестнадцатеричного в двоичное без потери ведущего 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:]