python-3.x - python 3 中的解包语法

标签 python-3.x unpack

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

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

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

asd = ['e2','07']

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

unpack("<H","e207")

我知道这行不通,但我希望你明白。

为了澄清,我知道我可以在列表中获取 b'\x11' 形式的数据,但随后它会被解释为 ASCII,这是我不想要的,这就是我拥有它的原因按照我展示的格式。

最佳答案

您在文本对象中拥有十六进制编码的数据。因此,要返回原始十六进制字节,您可以对文本字符串进行解码。请注意,这不是 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,)

关于python-3.x - python 3 中的解包语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53377529/

相关文章:

Perl 打包/解包和二进制字符串的长度

python - 解压元组内的元组

python - Keras 在一类 Cifar-10 上过度拟合

python - 尝试使用python读取s3内容中按时间排序的所有文件

python - 为什么 "include"文件夹在 python 分发中包含 .h 文件(python 3.6.4)

python-3.x - 如何在终端中使用 python 3.7.1 从我的桌面打开文本文件

file-io - 如何在 python 3.3.3 中读取文本文件并将其存储在变量中?

python - C 中的 "Unpacking"

python - UDP python 到 c 打包的二进制数据 - struct.pack ('<ff' ,

python - ValueError:值太多