我有一个字节对象:
a = b'067b'
如何从中获取字符串?像这样:
"067b"
我试过了:
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'
是否无法这样做?
答案 0 :(得分:9)
你只想在这里从ASCII解码,你的bytestring是已经代表十六进制数字,用ASCII字符:
>>> a = b'067b'
>>> a.decode('ascii')
'067b'
您尝试的所有内容都将字节解释为数字数据,可以是表示字节的十六进制数字,也可以是表示数字数据的字节。
因此,您的第一次尝试将值06
作为十六进制数并将其转换为字节值6
,并将7b
转换为字节值123,即ASCII {
字符的代码点。
在第二次尝试中,您将每个字节转换为其数值的十六进制表示。 0
字节被解释为整数48('0'
字符的ASCII代码点),以十六进制为30
。 '6'
为54,或十六进制为36
等。
答案 1 :(得分:6)
server/collections/reduced.js
表示可能令人困惑。 bytes
与b'0607'
不同。 bytes([0x06,0x07]
实际上是4个字节b'0607'
,其中48是[48,54,48,55]
等的ascii代码。
0
因此[x for x in b'0607']
[48, 54, 48, 55]
已经是ascii字符串,但如果您希望将其转换为b'0607'
,则表示为bytes
,您需要str
(以便构建一个str从那些字节解释它们就像ascii代码(因为它们))。
通常,您将b'0607'.decode("ascii")
转换为十六进制字符串,如下所示:
bytes