长度为16的十六进制值的转换不正确

时间:2019-12-05 17:46:12

标签: python-3.x

我有一个16位十六进制值(即长度16),我想将其转换为二进制,如下所示:

n = '5851F42D00000000'    # length = 16
bin_ = bin(int(n, 16))[2:]
print(len(bin_))

我到达这里63,但是我期望结果二进制文件的长度为64。我在这里做错了吗?

谢谢

2 个答案:

答案 0 :(得分:3)

bin不会给您前导零,因为它无法知道您想要多少个前导零。您可以使用字符串格式来获得所需的行为:

>>> n = '5851F42D00000000'
>>> '{:064b}'.format(int(n, 16))
'0101100001010001111101000010110100000000000000000000000000000000'
>>> len(_)
64

格式字符串{:064b}用二进制格式格式化整数,前导零到长度64。

答案 1 :(得分:0)

此二进制数字前导零:

>>> f'{int(n, 16):064b}'
'0101100001010001111101000010110100000000000000000000000000000000'

bin将返回最短的表示形式,不包括前导零:

>>> bin(int(n, 16))
'0b101100001010001111101000010110100000000000000000000000000000000'
   ^ there's technically a zero before that