Python3字节到十六进制字符串

时间:2014-11-19 17:42:18

标签: python python-3.x hex

我有一个字节对象:

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'

是否无法这样做?

2 个答案:

答案 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表示可能令人困惑。 bytesb'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