1

我正在使用hex(int('00000000', 2))将二进制字符串转换为十六进制。

10它适用于to的所有(输出)值FF,但它不能正确填充0009我看到的是0x0to0x9而不是我期望的0x00to 。0x09

我究竟做错了什么?

4

4 回答 4

5

hex()将返回可能的最短字符串。

一种替代方法是简单地使用:

"0x%02x" % int('00000000', 2)
于 2012-10-19T07:24:18.140 回答
3

为什么你认为hex(0)应该返回0x000x0在语义上是正确的,并且是 hexadecimal 的最短表示0。考虑一下:当你写十进制零时,它0不是00。或者例如0x9== 00009== 9。后者是数字的自然非冗余十进制表示9

于 2012-10-19T07:21:36.970 回答
0

0x9是一个有效的十六进制数,等于0x09。该hex方法不知道要添加多少填充)

您可以使用正则表达式来修复填充并从“0x9”获取“0x09”

number = re.sub('x(\d)$','x0\1',number)
于 2012-10-19T07:27:28.870 回答
0

使用字符串格式将值转换为十六进制。

'0x{:02x}'.format(int('00000110', 2))
于 2012-10-19T07:29:25.783 回答