看看这个:
fc = '0x'
for i in b[0x15c:0x15f]:
fc += hex(ord(i))[2:]
让我们说这段代码找到了十六进制00 04 0f,而不是那样写,它删除了第一个0,并写道:04f 有什么帮助吗?
答案 0 :(得分:21)
这种情况正在发生,因为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)
答案 1 :(得分:14)
>>> map("{:02x}".format, (10, 13, 15))
['0a', '0d', '0f']
答案 2 :(得分:2)
print ["0x%02x"%ord(i) for i in b[0x15c:0x15f]]
使用格式字符串"%2x"
告诉它将其格式化为2个字符宽,同样"%02x"
告诉它填充0的
请注意,这仍将从超过2个十六进制值的内容中删除前导0
例如:"0x%02x"%0x0055 => "0x55"
答案 3 :(得分:0)
为方便起见,它仍然只是一个图形表示 该值实际上并未从数据中删除,只是在视觉上缩短了。
此处有完整说明及其原因或为何不重要:Why are hexadecimal numbers prefixed with 0x?