繁体   English   中英

struct.unpack 的目的

[英]Purpose of struct.unpack

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

3A BC 00 00

这些代表一个浮点值。 我想使用 python 将它们转换为浮点数。 我可以使用 python 使用struct.unpack来做到这一点。

具体来说:

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转换?

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

现在,python 应该如何解释这些字节? 他们是integer,一堆花车,一堆字符? 这就是格式字符串的用途。 "f"的意思是“给我一个 4 字节的浮点数”。 正如你所注意到的,“>”是大端的,但它有点微妙。 Python 将抓取 4 个字节,然后处理字节序,最后进行浮点转换。 假设输入是[0x3A, 0xBC, 0x00, 0x00, 0x11, 0x22, 0x33, 0x44] 格式“>ff”将返回 2 个浮点数。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM