Mig*_*ork 9 python hex python-3.x
我有一个字节对象:
a = b'067b'
Run Code Online (Sandbox Code Playgroud)
我如何从中获取字符串?像这样:
"067b"
Run Code Online (Sandbox Code Playgroud)
我试过了:
In [3]: str(a)
Out[3]: "b'067b'"
In [4]: import codecs
In [5]: codecs.decode(a,'hex')
Out[5]: b'\x06{'
In [6]: import binascii
In [7]: binascii.b2a_hex(a)
Out[7]: b'30363762'
In [8]: binascii.hexlify(a)
Out[8]: b'30363762'
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
你只想在这里解码ASCII,你的bytestring 已经用ASCII字符表示十六进制数字:
>>> a = b'067b'
>>> a.decode('ascii')
'067b'
Run Code Online (Sandbox Code Playgroud)
您尝试的所有内容都将字节解释为数字数据,可以是表示字节的十六进制数字,也可以是表示数字数据的字节.
因此,您的第一次尝试将该值06作为十六进制数并将其转换为字节值6,并将7b其转换为字节值123,即{字符的ASCII代码点.
在第二次尝试中,您将每个字节转换为其数值的十六进制表示.该0字节被解释为整数48(字符的ASCII代码点'0'),30以十六进制表示.'6'是54,或36十六进制等
该bytes表示可能会造成混淆.b'0607'是不一样的bytes([0x06,0x07]).b'0607'实际上是4个字节[48,54,48,55],其中48是ascii代码0,等等.
[x for x in b'0607']
[48, 54, 48, 55]
Run Code Online (Sandbox Code Playgroud)
因为b'0607'它已经是一个ascii字符串,但表示为bytes你希望它将它转换为str你需要的b'0607'.decode("ascii")(以便你从那些字节构造一个str来解释它们像ascii代码(因为它们)).
通常,您将转换bytes为十六进制字符串,如下所示:
>>> a = binascii.hexlify(bytes([1,10,15,16,255]))
>>> a
b'010a0f10ff'
>>> type(a)
<class 'bytes'>
>>> b = a.decode("ascii")
>>> type(b)
<class 'str'>
Run Code Online (Sandbox Code Playgroud)