4

我编写了一个使用原始字节的程序(我不知道这是否是正确的名称!)但用户会将数据作为纯字符串输入。

如何转换它们?

我已经尝试过一种方法,但它返回一个长度为 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
4

2 回答 2

11

使用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

The hexlify() operation produces lowercase hex, but that is easily fixed with a .upper() call.

于 2013-03-29T11:08:00.583 回答
4

您必须从5A(表示十六进制数字的字符串)获取0x5A90(整数)并将它们输入chr(). 您可以使用 进行第一次转换int('0x5A', 16),因此您会得到类似

chr(int('0x5A', 16))
于 2013-03-29T11:04:23.743 回答