从十六进制转换为二进制而不会丢失前导0的python

时间:2010-07-15 17:46:21

标签: python binary hex

我在字符串中有一个十六进制值,如

h = '00112233aabbccddee'

我知道我可以将其转换为二进制文件:

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

但是,这会失去领先的0。反正有没有失去0的转换呢?或者最好的方法是在转换之前计算前导0的数量然后在之后添加它。

7 个答案:

答案 0 :(得分:18)

我认为默认情况下无法保留这些前导零。

每个十六进制数字转换为4个二进制数字,因此新字符串的长度应该是原始字符串的4倍。

h_size = len(h) * 4

然后,您可以使用.zfill将零填充到您想要的大小:

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

答案 1 :(得分:6)

这在Python中实际上非常简单,因为它对整数的大小没有任何限制。只需将'1'添加到十六进制字符串中,然后从输出中删除相应的'1'

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

答案 2 :(得分:2)

基本相同,但每个hexdigit填充4个绑定

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

答案 3 :(得分:0)

像python这样的新手,我会像这样继续

datastring = 'HexInFormOfString'  

当python将字符串转换为Hex时,填充以容纳前面的零(如果有)。

datastrPadded = 'ffff' + datastring 

将填充值转换为二进制。

databin = bin(int(datastrPadded,16))

删除python添加的2bits('0b')表示二进制+ 16填充位。

databinCrop = databin[18:]

答案 4 :(得分:0)

这会将十六进制字符串转换为二进制字符串。由于您希望长度取决于原始长度,因此这可能是您想要的。

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

我需要使用整数作为输入,并使用带有前缀“ 0b”和“ 0x”的纯十六进制/ bin字符串,所以我的一般解决方案是:

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