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