我正在使用hex(int('00000000', 2))
将二进制字符串转换为十六进制。
10
它适用于to的所有(输出)值FF
,但它不能正确填充00
,09
我看到的是0x0
to0x9
而不是我期望的0x00
to 。0x09
我究竟做错了什么?
hex()
将返回可能的最短字符串。
一种替代方法是简单地使用:
"0x%02x" % int('00000000', 2)
为什么你认为hex(0)
应该返回0x00
?0x0
在语义上是正确的,并且是 hexadecimal 的最短表示0
。考虑一下:当你写十进制零时,它0
不是00
。或者例如0x9
== 00009
== 9
。后者是数字的自然非冗余十进制表示9
。
0x9
是一个有效的十六进制数,等于0x09
。该hex
方法不知道要添加多少填充)
您可以使用正则表达式来修复填充并从“0x9”获取“0x09”
number = re.sub('x(\d)$','x0\1',number)
使用字符串格式将值转换为十六进制。
'0x{:02x}'.format(int('00000110', 2))