Py学习  »  Python

在python 3中解包语法

James • 5 年前 • 1177 次点击  

我正在尝试使用unpack将十六进制数转换成小数。 当我使用:

from struct import *
unpack("<H",b"\xe2\x07")

输出为: 2018 ,这就是我想要的。 问题是我的十六进制数据以字符串的形式出现在列表中:

asd = ['e2','07']

我的问题是,有没有一种简单的方法可以使用unpack而不使用反斜杠x?像这样:

unpack("<H","e207")

我知道这不管用,但我希望你能明白。

为了澄清,我知道我可以 b'\x11' 在列表中,但是它被解释为ascii,这是我不想要的,这就是为什么我有我显示的格式。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/42998
 
1177 次点击  
文章 [ 1 ]  |  最新文章 5 年前
wim
Reply   •   1 楼
wim    6 年前

在文本对象中有十六进制编码的数据。所以,回到原始的十六进制字节,你可以 译码 文本字符串。请注意,这不是python 3.x中通常的约定(通常,文本字符串已经被解码)。

>>> codecs.decode('e207', 'hex')
b'\xe2\x07'

同样的便利功能:

>>> bytes.fromhex('e207')
b'\xe2\x07'

现在你可以 struct.unpack 那些字节。总而言之:

>>> asd = ['e2','07']
>>> text = ''.join(asd)
>>> encoded = codecs.decode(text, 'hex')
>>> struct.unpack("<H", encoded)
(2018,)