【问题标题】:Converting string to raw bytes将字符串转换为原始字节
【发布时间】:2013-03-20 01:44:54
【问题描述】:

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

如何转换它们?

我尝试了一个方法,但它返回一个长度为 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

【问题讨论】:

  • return ''.join(bytesList) 怎么样?

标签: python arrays string byte


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    使用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() 调用解决。

    【讨论】:

      猜你喜欢
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 2020-07-09
      • 2011-05-23
      • 1970-01-01
      相关资源
      最近更新 更多