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