转换为每个字节添加0x30的十六进制字符串

时间:2016-05-19 18:23:32

标签: python string hex

我花了几个小时,我无法自己解决这个问题:

我有一个带有一些十六进制字节的字符串,如'03FE5',我必须得到另一个具有相同十六进制数字的字符串,但在每个数字中添加0x30所以:

  • 将0x30添加到'0'并获得0x30
  • 将0x30添加到'3'并获得0x33
  • 将“0x30”添加到“F”并获取0x3F
  • 将“0x30”添加到“E”并获取0x3E
  • 将0x30添加到'5'并获得0x35

最后让他们到一个字符串获得'03?> 5'这是ascii的结果。

我尝试了几件事,但也许这是他最接近他的一个:

message='03FE5'
y=""
for x in message: 
    y+=str(hex(int(x,16)+48))[2:]

你能帮帮我吗?

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'