我花了几个小时,我无法自己解决这个问题:
我有一个带有一些十六进制字节的字符串,如'03FE5',我必须得到另一个具有相同十六进制数字的字符串,但在每个数字中添加0x30所以:
最后让他们到一个字符串获得'03?> 5'这是ascii的结果。
我尝试了几件事,但也许这是他最接近他的一个:
message='03FE5'
y=""
for x in message:
y+=str(hex(int(x,16)+48))[2:]
你能帮帮我吗?
答案 0 :(得分:0)
添加0x30
只能帮助数字半字节;对于字母半字节(ABCDEF
),您需要添加ord("A") - 0x0a
(或ord("a") - 0x0a
)。
如果您查看ASCII对应值(例如:for i in range(128): print(i, chr(i))
),您会看到所有数字都从0x30
开始,但这些字母后来不会立即开始 - 大写字母从{开始{1}}和小写字母从0x41
开始。你想减去0x61
,因为你不想重复计算 - 如果有人给你啃0x0a
并且你添加了0x0b
,你就不会得到ord("A")
1}},你将获得B
。
答案 1 :(得分:0)
大多数操作都是无操作,所以只需利用这个事实:
>>> chrmap = {'A': '\x3a', 'B': '\x3b', 'C': '\x3c', 'D': '\x3d', 'E': '\x3e', 'F': '\x3f'}
>>> ''.join(chrmap.get(c, c) for c in '03FE5')
'03?>5'