我已经尝试解决这个问题有一段时间了,但我一无所获。 我有两个无符号整数。这意味着四个字节。
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
的选角?
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 位尾数,这是单精度浮点数的标准格式。