在Python中将十六进制转换为二进制而不丢失前导0
我有一个字符串,里面是十六进制的值,比如:
h = '00112233aabbccddee'
我知道可以用下面的方式把它转换成二进制:
h = bin(int(h, 16))[2:]
但是,这样会丢失前面的0。有没有办法在转换的时候不丢失这些0?或者最好的办法就是在转换之前先数一下前面有多少个0,然后再转换后加上去?
7 个回答
2
基本上是一样的,只不过每个十六进制数字的边距(padding)设置为4个二进制位。
''.join(bin(int(c, 16))[2:].zfill(4) for c in h)
15
在Python中,这个其实非常简单,因为它对整数的大小没有限制。只需要在十六进制字符串前面加一个'1'
,然后在输出结果中去掉对应的'1'
就可以了。
>>> h = '00112233aabbccddee'
>>> bin(int(h, 16))[2:] # old way
'1000100100010001100111010101010111011110011001101110111101110'
>>> bin(int('1'+h, 16))[3:] # new way
'000000000001000100100010001100111010101010111011110011001101110111101110'
25
我觉得默认情况下没有办法保留那些前面的零。
每一个十六进制数字对应4个二进制数字,所以新字符串的长度应该正好是原来字符串的4倍。
h_size = len(h) * 4
然后,你可以使用 .zfill
来填充你想要的零:
h = ( bin(int(h, 16))[2:] ).zfill(h_size)