[英]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.