将hexstring转换为单个字节python 2.7

时间:2018-01-08 10:03:58

标签: python python-2.7 escaping hex

早上好,

这可能非常容易,但我的大脑今天还没有工作。

所以我有一个十六进制f70307d600017010字符串我需要将其转换为\xf7\x03\x07\xd6\x00\x01\x70\x10

或其他类似的东西,即将字符串转义为十六进制。

有人有任何建议吗?

由于 吉姆

3 个答案:

答案 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')