struct.unpack的用途

问题描述 投票:0回答:1

我已经尝试解决这个问题有一段时间了,但我一无所获。 我有两个无符号整数。这意味着四个字节。

3A BC 00 00

这些代表浮点值。我想使用 python 将它们转换为浮点数。 我可以使用

struct.unpack
使用 python 来完成此操作。

具体:

values = [0x3A, 0xBC, 0x00, 0x00]
struct.unpack('>f', bytes(values))

有人可以解释这个特定的

unpack
命令吗?

我知道

>
部分反转了位(大端实现)。所以他们会是
00 00 BC 3A
f
有什么作用?根据文档,这意味着浮动...这是什么意思?我尝试忽略它,但我得到了
struct.error: unpack requires a buffer of 0 bytes

最后,为什么会发生

bytes
的选角?

python struct floating-point binary unpack
1个回答
2
投票

struct
模块处理Python对象和连续字节序列之间的转换。
[0x3A, 0xBC, 0x00, 0x00]
是Python整数列表(即对
int
对象的引用),而不是连续的字节序列。
bytes
对象是一个连续的字节序列,可以使用 0 到 255 之间的可迭代整数进行初始化,所以这是第一步。

现在,python 应该如何解释这些字节?它们是一个整数、一堆浮点数、还是一堆字符?这就是格式字符串的用途。

"f"
的意思是“给我一个 4 字节浮点数”。正如您所注意到的,“>”是大端字节序,但它有点微妙。 Python会抓取4个字节,然后处理字节序,最后进行浮点转换。假设输入是
[0x3A, 0xBC, 0x00, 0x00, 0x11, 0x22, 0x33, 0x44]
?格式“">ff”将返回 2 个浮点数。

最后,这不是“两个整数”。它是一个符号位、8 位指数和 23 位尾数,这是单精度浮点数的标准格式。

© www.soinside.com 2019 - 2024. All rights reserved.