开发者

Converting from hex to binary without losing leading 0's python

I have a hex value in a string like

h = '00112233aabbccddee'

I know I can convert this to binary with:

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

However, this loses the leading 0's. Is there anyway to do this conversion without losing the 0's? Or is the best way to do this just to count the number of leading 0's before the conversion then add i开发者_开发技巧t in afterwards.


I don't think there is a way to keep those leading zeros by default.

Each hex digit translates to 4 binary digits, so the length of the new string should be exactly 4 times the size of the original.

h_size = len(h) * 4

Then, you can use .zfill to fill in zeros to the size you want:

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


This is actually quite easy in Python, since it doesn't have any limit on the size of integers. Simply prepend a '1' to the hex string, and strip the corresponding '1' from the output.

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


Basically the same but padding to 4 bindigits each hexdigit

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


A newbie to python such as I would proceed like so

datastring = 'HexInFormOfString'  

Padding to accommodate preceding zeros if any, when python converts string to Hex.

datastrPadded = 'ffff' + datastring 

Convert padded value to binary.

databin = bin(int(datastrPadded,16))

Remove 2bits ('0b') that python adds to denote binary + 16 padded bits .

databinCrop = databin[18:]


This converts a hex string into a binary string. Since you want the length to be dependent on the original, this may be what you want.

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


I needed integer as input and pure hex/bin strings out with the prefixs '0b' and '0x' so my general solution is this:

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:]


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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜