13

看看这个:

fc = '0x'
for i in b[0x15c:0x15f]:
    fc += hex(ord(i))[2:]

假设这段代码找到了十六进制 00 04 0f ,而不是那样写,它删除了第一个 0 ,并写道 : 04f 有什么帮助吗?

4

4 回答 4

30

发生这种情况是因为hex()不会包含任何前导零,例如:

>>> hex(15)[2:]
'f'

为确保您始终获得两个字符,您可以str.zfill()在必要时添加前导零:

>>> hex(15)[2:].zfill(2)
'0f'

这是您的代码中的样子:

fc = '0x'
for i in b[0x15c:0x15f]:
    fc += hex(ord(i))[2:].zfill(2)
于 2013-04-08T16:56:42.817 回答
18
>>> map("{:02x}".format, (10, 13, 15))
['0a', '0d', '0f']
于 2015-11-29T18:59:51.963 回答
2
print ["0x%02x"%ord(i) for i in b[0x15c:0x15f]]

使用格式字符串"%2x"告诉它格式化为 2 个字符宽,同样"%02x"告诉它用 0 填充

请注意,这仍然会从具有超过 2 个十六进制值的事物中删除前导 0,例如:"0x%02x"%0x0055 => "0x55"

于 2013-04-08T16:53:33.357 回答
0

为了您的方便,它仍然只是一个图形表示。
该值实际上并没有从数据中删除,它只是在视觉上缩短了。

此处的完整描述以及为什么或为什么不重要:为什么十六进制数字以 0x 为前缀?

于 2013-04-08T16:54:46.247 回答