Преобразование из гекса в бинарный без потери питона 0 ведущих - PullRequest
8 голосов
/ 15 июля 2010

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

h = '00112233aabbccddee'

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

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

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

Ответы [ 6 ]

18 голосов
/ 15 июля 2010

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

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

h_size = len(h) * 4

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

h = ( bin(int(h, 16))[2:] ).zfill(h_size)
7 голосов
/ 18 июня 2013

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

>>> h = '00112233aabbccddee'
>>> bin(int(h, 16))[2:]  # old way
'1000100100010001100111010101010111011110011001101110111101110'
>>> bin(int('1'+h, 16))[3:]  # new way
'000000000001000100100010001100111010101010111011110011001101110111101110'
2 голосов
/ 16 июля 2010

В основном то же самое, но с добавлением 4-х биндигитов на каждую шестнадцатеричную цифру

''.join(bin(int(c, 16))[2:].zfill(4) for c in h)
0 голосов
/ 12 февраля 2015
hexa = '91278c4bfb3cbb95ffddc668d995bfe0'
binary = bin(int(hexa, 16))[2:]
print binary
hexa_dec = hex(int(binary, 2))[2:]
print hexa_dec
0 голосов
/ 17 июня 2013

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

data = ""
while len(h) > 0:
    data = data + chr(int(h[0:2], 16))
    h = h[2:]
print h
0 голосов
/ 12 апреля 2013

Новичок в python, такой как я, поступил бы так:

datastring = 'HexInFormOfString'  

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

datastrPadded = 'ffff' + datastring 

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

databin = bin(int(datastrPadded,16))

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

databinCrop = databin[18:]
...