将字符串转换为原始字节

5
我写了一个程序,用于处理原始字节(我不知道这是否是正确的名称!),但是用户会以普通字符串形式输入数据。
怎么转换呢?
我尝试使用一种方法,但它返回长度为0的字符串!
以下是起始字符串:
5A05705DC25CA15123C8E4750B80D0A9

这是我需要的结果:

\x5A\x05\x70\x5D\xC2\x5C\xA1\x51\x23\xC8\xE4\x75\x0B\x80\xD0\xA9

这是我写的方法:

def convertStringToByte(string):
    byte_char = "\\x"
    n=2
    result = ""
    bytesList = [string[i:i+n] for i in range(0, len(string), n)]
    for i in range(0, len(bytesList)):
        bytesList[i] = byte_char + bytesList[i]
    return result

1
return ''.join(bytesList)怎么样? - dmg
2个回答

12

使用binascii.unhexlify()函数:

import binascii

binary = binascii.unhexlify(text)
同一个模块也有 binascii.hexlify() 方法,用于镜像操作。
演示:
>>> import binascii
>>> binary = '\x5A\x05\x70\x5D\xC2\x5C\xA1\x51\x23\xC8\xE4\x75\x0B\x80\xD0\xA9'
>>> text = '5A05705DC25CA15123C8E4750B80D0A9'
>>> binary == binascii.unhexlify(text)
True
>>> text == binascii.hexlify(binary).upper()
True

hexlify() 操作生成小写十六进制,但通过调用 .upper() 转换为大写即可。


4

您需要将表示十六进制数字的字符串5A转换为整数0x5A90,然后将其传入chr()函数。您可以使用int('0x5A', 16)进行第一次转换,得到类似以下结果:

chr(int('0x5A', 16))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接