提问人:Cristian 提问时间:8/8/2008 最后编辑:martineauCristian 更新时间:4/14/2023 访问量:153543
将字节转换为浮点数?
Convert Bytes to Floating Point Numbers?
答:
126赞
tzot
9/16/2008
#1
>>> import struct
>>> struct.pack('f', 3.141592654)
b'\xdb\x0fI@'
>>> struct.unpack('f', b'\xdb\x0fI@')
(3.1415927410125732,)
>>> struct.pack('4f', 1.0, 2.0, 3.0, 4.0)
'\x00\x00\x80?\x00\x00\x00@\x00\x00@@\x00\x00\x80@'
评论
8赞
dplass
3/3/2011
这仅适用于 4 或 8 字节浮点数。10字节浮点数呢?
0赞
Startec
8/26/2014
我同意@dplass,其他花车呢。而且,为什么这个字符串的末尾有一个逗号?
6赞
tzot
9/11/2014
@startec 问题是关于 4 字节浮点数的。哪个字符串以逗号结尾?只有 from 的元组有逗号。struct.unpack
1赞
tzot
10/29/2015
@PetrKrampl C(单字节,4 字节)和 C(双字节,8 字节)的精度。Python真的是C。无论存储为 C 的准确性如何,当它转换为 C(通过 struct.pack)然后返回 C(Python 将 4 个字节提取为 C,然后将结果转换回 C /Python )时,它都会丢失。这适用于所有使用浮点数IEEE754的 Python 实现(CPython 确实如此;无论如何,我不知道任何系统上有任何不符合IEEE754的 Python 实现)。float
double
float
double
3.141592654
double
float
double
float
double
float
3赞
Gabriel Staples
8/19/2016
注意:要查看字节数组的各个字节(用 b' 表示),请使用 .例如:以 .这非常方便。list()
list(struct.pack('f', 3.141592654))
[219, 15, 73, 64]
21赞
NDM
1/13/2019
#2
只是一点点补充,如果你想要一个浮点数作为 unpack 方法的输出而不是元组,只需写
>>> import struct
>>> [x] = struct.unpack('f', b'\xdb\x0fI@')
>>> x
3.1415927410125732
如果你有更多的浮点数,那么就写
>>> import struct
>>> [x,y] = struct.unpack('ff', b'\xdb\x0fI@\x0b\x01I4')
>>> x
3.1415927410125732
>>> y
1.8719963179592014e-07
>>>
评论
2赞
lifedroid
1/4/2022
或者,您可以引用 RHS 上的列表位置x = struct.unpack('f', b'\xdb\x0fI@')[0]
4赞
Chance Cuddeback
8/20/2022
#3
我会添加评论,但我没有足够的声誉。
只是为了添加一些信息。如果你有一个包含 X 个浮点数的字节缓冲区,则解包的语法为:
struct.unpack('Xf', ...)
如果值为双倍,则解包为:
struct.unpack('Xd', ...)
0赞
Rousseau
4/14/2023
#4
注释:假设您通过 MODBUS 通信协议接收一个浮点变量(2 个寄存器,每个寄存器 1 个 int),您可以使用以下方式转换消息:
floatvar = struct.unpack('f',int1.to_bytes(2,'big')+int2.to_bytes(2,'big')).
*注意MODBUS是大端序
评论