在Python中将十六进制转换为二进制而不丢失前导0

12 投票
7 回答
39002 浏览
提问于 2025-04-16 01:21

我有一个字符串,里面是十六进制的值,比如:

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)

撰写回答