【发布时间】:2013-03-30 20:44:21
【问题描述】:
看看这个:
fc = '0x'
for i in b[0x15c:0x15f]:
fc += hex(ord(i))[2:]
假设这段代码找到了十六进制 00 04 0f ,而不是这样写,它删除了第一个 0 ,并写成: 04f 有什么帮助吗?
【问题讨论】:
看看这个:
fc = '0x'
for i in b[0x15c:0x15f]:
fc += hex(ord(i))[2:]
假设这段代码找到了十六进制 00 04 0f ,而不是这样写,它删除了第一个 0 ,并写成: 04f 有什么帮助吗?
【问题讨论】:
print ["0x%02x"%ord(i) for i in b[0x15c:0x15f]]
使用格式字符串 "%2x" 告诉它格式化为 2 个字符宽,同样"%02x" 告诉它用 0 填充
请注意,这仍然会从具有超过 2 个十六进制值的事物中删除前导 0
例如:"0x%02x"%0x0055 => "0x55"
【讨论】:
为了您的方便,它仍然只是一个图形表示。
该值实际上并没有从数据中删除,它只是在视觉上缩短了。
这里有完整的描述以及它为什么或为什么它不重要:Why are hexadecimal numbers prefixed with 0x?
【讨论】:
这是因为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)
【讨论】:
>>> map("{:02x}".format, (10, 13, 15))
['0a', '0d', '0f']
【讨论】: