5

我正在研究如何获取十六进制值,并将它们转换为字符串或整数。例子:

>>> a = b'\x91\x44\x77\x65\x92'
>>> b = b'\x44\x45\x41\x44\x42\x45\x45\x46'
>>> a
>>> �Dwe�
>>> b
>>> 'DEADBEEF'

ab的期望结果:

>>> 9144776592
>>> '4445414442454546'

谢谢你。

4

3 回答 3

7
>>> a = b'\x91\x44\x77\x65\x92'
>>> a.encode("hex")
'9144776592'
>>> b.encode('hex')
'4445414442454546'

请注意,使用它并不好encode('hex')- 这是一个解释为什么:

您使用十六进制编解码器的方式在 Python 2 中有效,因为您可以在 Python 2 中对 8 位字符串调用 encode(),即您可以对已经编码的内容进行编码。那没有意义。encode() 用于将 Unicode 字符串编码为 8 位字符串,而不是将 8 位字符串编码为 8 位字符串。

在 Python 3 中,您不能再对 8 位字符串调用 encode(),因此十六进制编解码器变得毫无意义并被删除。

使用binascii更容易更好,它是为二进制和 ascii 之间的转换而设计的,它适用于 python 2 和 3:

>>> import binascii
>>> binascii.hexlify(b'\x91\x44\x77\x65\x92')
b'9144776592'
于 2013-08-18T10:46:12.080 回答
3

使用binascii.hexlify

In [1]: from binascii import hexlify

In [2]: a = b'\x91\x44\x77\x65\x92'

In [3]: hexlify(a)
Out[3]: b'9144776592'

In [4]: b = b'\x44\x45\x41\x44\x42\x45\x45\x46'

In [5]: hexlify(b)
Out[5]: b'4445414442454546'

如果你想要str而不是字节:

In [7]: hexlify(a).decode('ascii')
Out[7]: '9144776592'
于 2013-08-18T10:46:10.360 回答
1

使用binascii.hexlify

>>> import binascii
>>> a = b'\x91\x44\x77\x65\x92'
>>> b = b'\x44\x45\x41\x44\x42\x45\x45\x46'
>>> binascii.hexlify(a)
b'9144776592'
>>> binascii.hexlify(b)
b'4445414442454546'
于 2013-08-18T10:46:09.183 回答