首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >struct.unpack的目的

struct.unpack的目的
EN

Stack Overflow用户
提问于 2022-09-01 23:11:50
回答 1查看 75关注 0票数 -2

一段时间以来,我一直在努力想办法解决这个问题,但却一无所获。我有两个没有符号的整数。这意味着四个字节。

代码语言:javascript
复制
3A BC 00 00

它们表示一个浮点值。我希望使用python将它们转换为浮动。我可以使用struct.unpack使用python来完成这一任务。

具体地说:

代码语言:javascript
复制
values = [0x3A, 0xBC, 0x00, 0x00]
struct.unpack('>f', bytes(values))

有人能解释一下这个特定的unpack命令吗?

我知道>部件反转位(大端实现)。所以他们将是00 00 BC 3Af是做什么的?根据文件的意思是浮动..。这是什么意思?我试着省略它,但我得到了struct.error: unpack requires a buffer of 0 bytes

最后,为什么会发生向bytes的转换?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-01 23:28:18

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73576252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档