Python:将字符串转换为压缩十六进制(';01020304';->;';\x01\x02\x03\x04';)

Python:将字符串转换为压缩十六进制(';01020304';->;';\x01\x02\x03\x04';),python,Python,我正在尝试将一串数字转换为“压缩十六进制”格式 例如:“01020304'->'\x01\x02\x03\x04” 我有它的工作,但我希望有更好的(更快,更干净)更pythonic的方式来做到这一点 def split_len(seq, length): return [seq[i:i+length] for i in range(0, len(seq), length)] def ascii_to_packed_hex(string_data): r""" >

我正在尝试将一串数字转换为“压缩十六进制”格式

例如:“01020304'->'\x01\x02\x03\x04”

我有它的工作,但我希望有更好的(更快,更干净)更pythonic的方式来做到这一点

def split_len(seq, length):
    return [seq[i:i+length] for i in range(0, len(seq), length)]

def ascii_to_packed_hex(string_data): 
    r"""
    >>> ascii_to_packed_hex('01')
    '\x01'

    >>> ascii_to_packed_hex('0102030405')
    '\x01\x02\x03\x04\x05'

    >>> ascii_to_packed_hex('fafbfcfd')
    '\xfa\xfb\xfc\xfd'

    >>> ascii_to_packed_hex('31323334')
    '1234'
    """               
    hex_data=''
    string_data = string_data.encode('iso-8859-1')
    string_parts = split_len(string_data, 2)

    if len(string_parts)>=1:
        for each_part in string_parts:
            encoded_part = each_part[:2]
            ascii_part   = each_part[2:]
            encoded_part_as_hex = string.atoi(encoded_part,base=16)
            encoded_part_as_hex = chr(encoded_part_as_hex)
            hex_data = hex_data + encoded_part_as_hex + ascii_part
        return hex_data
    else:
        return string_data

    import doctest
    doctest.testmod()
使用,它位于标准库中:

import binascii, doctest

def ascii_to_packed_hex(string_data): 
    r"""
    >>> binascii.a2b_hex('01')
    '\x01'
    >>> binascii.a2b_hex('0102030405')
    '\x01\x02\x03\x04\x05'
    >>> binascii.a2b_hex('fafbfcfd')
    '\xfa\xfb\xfc\xfd'
    >>> binascii.a2b_hex('31323334')
    '1234'
    """
    doctest.testmod()

如果您不能使用
binascii
str.decode('hex')
,因为这是家庭作业或其他东西,您可以:

def ascii_to_packed_hex(string_data): 
    # convert each pair of hex digits in the string into an integer
    # then convert those to characters and join them into a string
    return ''.join(chr(int(digits, 16)) for digits in 
                (string_data[x:x+2] for x in range(0, len(string_data), 2)))

在Python2中,您可以使用
str.decode()

在Python3中,可以使用
bytes.fromhex()

如果您希望转换为
str
格式,请按照您使用的编码方式进行转换

>>> bytes.fromhex('31323334').decode('utf-8')
'1234'
你是说像这样

def ascii_to_packed_hex(s):
    return "".join(chr(int(s[n:n+2], 16)) for n in range(0,len(s), 2))
>>> bytes.fromhex('31323334').decode('utf-8')
'1234'
def ascii_to_packed_hex(s):
    return "".join(chr(int(s[n:n+2], 16)) for n in range(0,len(s), 2))