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

Python 转换将0x30添加到每个字节的十六进制字符串,python,string,hex,Python,String,Hex,我已经花了几个小时,无法独自解决此问题: 我有一个包含一些十六进制字节的字符串,如“03FE5”,我必须得到另一个具有相同十六进制数的字符串,但在每个数字中添加0x30,以便: 将0x30添加到“0”并获取0x30 将0x30添加到“3”并获取0x33 将0x30添加到“F”并获取0x3F 将0x30添加到“E”并获取0x3E 将0x30添加到“5”并获取0x35 最后,将它们放到一个字符串中,该字符串获得“03?>5”,这是ascii结果 我尝试过几种方法,但可能这是最接近正确的方法: m

我已经花了几个小时,无法独自解决此问题:

我有一个包含一些十六进制字节的字符串,如“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:]

你能帮我吗?

添加
0x30
只会对数字小数位有帮助;对于字母半字节(
ABCDEF
),您需要添加
ord(“A”)-0x0a
(或
ord(“A”)-0x0a


如果查看ASCII对应值(例如:范围(128)中i的
:print(i,chr(i))
),您将看到所有数字都从
0x30开始,但字母不会立即开始-大写字母从
0x41开始,小写字母从
0x61开始。你想减去
0x0a
,因为你不想重复计算——如果有人给你零头
0x0b
,你加上
ord(“A”)
,你不会得到
B
,你会得到
L

大多数操作都不是ops,所以请充分利用这一事实:

>>> chrmap = {'A': '\x3a', 'B': '\x3b', 'C': '\x3c', 'D': '\x3d', 'E': '\x3e', 'F': '\x3f'}
>>> ''.join(chrmap.get(c, c) for c in '03FE5')
'03?>5'

我当然知道了,也许是显而易见的,但我有点沮丧。你研究过位运算符吗?我尝试过将每个十六进制字节转换为int,添加48,重新转换为十六进制,删除前两个字符……如果你发布(部分)代码,这会很有帮助,这样人们就可以给你如何继续的提示。我尝试了很多方法,但这可能是最接近于好的方法:message='03FE5'y=”“,用于message:y+=str(hex(int(x,16)+48))中的x[2:]