【问题标题】:'str' object has no attribute 'decode''str' 对象没有属性 'decode'
【发布时间】:2015-05-15 20:18:25
【问题描述】:

我正在尝试将十六进制字符串解码为二进制值。 我在互联网上找到了以下命令来完成它,

string_bin = string_1.decode('hex')

但我说错了

'str' object has no attrubute 'decode'

我正在使用 python v3.4.1

【问题讨论】:

    标签: python string python-3.x binary hex


    【解决方案1】:

    你不能解码字符串对象;它们已经解码。您必须使用不同的方法。

    您可以使用codecs.decode() function 来应用hex 作为编解码器:

    >>> import codecs
    >>> codecs.decode('ab', 'hex')
    b'\xab'
    

    这应用了Binary transform 编解码器;它相当于使用base64.b16decode() function,将输入字符串转换为大写:

    >>> import base64
    >>> base64.b16decode('AB')
    b'\xab'
    

    您还可以使用binascii.unhexlify() function 将十六进制数字序列“解码”为字节:

    >>> import binascii
    >>> binascii.unhexlify('ab')
    b'\xab'
    

    无论哪种方式,你都会得到一个bytes 对象。

    【讨论】:

    • >>> s = '1bcd67879034' >>> codecs.decode(s, 'hex') b'\x1b\xcdg\x87\x904' >>> ####### ############ 这不是预期的结果:但预期的“b'\x1b\xcd\x67\x87\x90\x34'”## 我错过了什么?
    • @rahookds:看起来是正确的。请注意,字节文字表示仅对 non-printable 字节使用 \xhh 转义序列。例如,34'4' 字符的十六进制 ASCII 代码点。 67'g'
    • 是的!那么,我如何查看我要查找的内容? ;-)
    • @rahookds:你在找什么?您拥有十六进制值中的字节。
    • 我正在寻找二进制(十六进制)值输出,例如 b'\x1b\xcd\x67\x87\x90\x34' 。
    【解决方案2】:

    使用binascii:

    import binascii
    
    binary_string = binascii.unhexlify(hex_string)
    

    【讨论】:

    • 应该是binascii.hexlify
    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 2018-12-01
    • 2014-05-26
    • 1970-01-01
    • 2021-07-05
    • 2021-07-09
    • 2021-10-30
    • 2014-11-25
    相关资源
    最近更新 更多