早上好,
这可能非常容易,但我的大脑今天还没有工作。
所以我有一个十六进制f70307d600017010
字符串我需要将其转换为\xf7\x03\x07\xd6\x00\x01\x70\x10
或其他类似的东西,即将字符串转义为十六进制。
有人有任何建议吗?
由于 吉姆
答案 0 :(得分:2)
如果您希望该输出的结果为文字,即:
>>> '\xf7\x03\x07\xd6\x00\x01\x70\x10'
'\xf7\x03\x07\xd6\x00\x01p\x10'
使用binascii
模块:
>>> import binascii
>>> s = "f70307d600017010"
>>> binascii.unhexlify(s)
'\xf7\x03\x07\xd6\x00\x01p\x10'
答案 1 :(得分:1)
这绝不是你应该这样做的方式,但考虑到我很无聊:
x = "f70307d600017010"
y = "\\"
count = 1
for letter in x:
print(count)
if count > 2:
y = y + "\\" + "x" + letter
count = 1
elif 1 == count:
y = y + "x" + letter
elif count % 2 == 1:
y = y + letter + "\\"
elif count % 2 == 0:
y = y + letter
count = count + 1
答案 2 :(得分:0)
使用正则表达式有几种解决方案。我最喜欢的是:
re.sub('(..)', r'\x\1', 'f70307d600017010')
另一个可能是:
''.join(r'\x' + x for x in re.findall('..', 'f70307d600017010'))
这些将创建一个转义字节的字符串(基于标签“escaping”意味着这一点)。如果您想要创建一个未转义字节的字符串:
re.sub('(..)', lambda m: chr(int(m.group(), 16)), 'f70307d600017010')
编辑:我现在更喜欢使用binascii
模块@ juanpa-arrivillaga的答案:binascii.unhexlify('f70307d600017010')