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

roo*_*oot 8 python binary hex

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

h = '00112233aabbccddee'
Run Code Online (Sandbox Code Playgroud)

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

h = bin(int(h, 16))[2:]
Run Code Online (Sandbox Code Playgroud)

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

Don*_*ner 19

我不认为默认情况下有一种方法可以保留这些前导零.

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

h_size = len(h) * 4
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用.zfill填充零所需的大小:

h = ( bin(int(h, 16))[2:] ).zfill(h_size)
Run Code Online (Sandbox Code Playgroud)


Mar*_*som 7

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

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

  • 一直在寻找这个一个小时! (3认同)
  • 为什么这不是一个被接受的答案。 (2认同)
  • @foobar,你会注意到它是在接受答案三年后发布的 - 不记得是什么促使我做出答案。 (2认同)