如何将二进制(字符串)转换为浮点值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (589)

我想将二进制数转换为浮点数。这是一个可能性的例子:

>>> float(-0b1110)

给我正确的输出:

-14.0

不幸的是,我正在处理二进制字符串,即我需要类似的东西float('-0b1110')。 但是,这不起作用:

>>> float('-0b1110')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): -0b1110

我试图使用binascii.a2b_qp(string[, header])它将一个引用可打印数据块转换回二进制并返回二进制数据。但最终,我得到了同样的错误:

>>> float(binascii.a2b_qp('-0b1110'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): -0b1110

我理解输出数是一个整数的情况,但如果我想获得数字12.546呢?函数调用二进制字符串会是什么样的呢?

提问于
用户回答回答于

另一种选择是:

from ast import literal_eval

float_str = "-0b101010101"
result = float(literal_eval(float_str))

与内置的“eval”不同,literal_eval甚至可以在用户输入上运行,因为它只能解析Python文字 - 并且不会执行表达式,这意味着它也不会调用函数。

用户回答回答于
float(int('-0b1110',0))

这对我行得通。

如果你有一个表示浮点数而不是整数的64位字符串,你可以进行三步转换 - 第一步将字符串转换为整数,第二步将其转换为8字节字符串,第三个将这些位重新解释为浮点数。

>>> import struct
>>> s = '0b0100000000101001000101111000110101001111110111110011101101100100'
>>> q = int(s, 0)
>>> b8 = struct.pack('Q', q)
>>> struct.unpack('d', b8)[0]
12.546

当然,您可以将所有这些步骤合并为一行。

>>> s2 = '0b1100000000101100000000000000000000000000000000000000000000000000'
>>> struct.unpack('d', struct.pack('Q', int(s2, 0)))[0]
-14.0

所属标签

可能回答问题的人

  • 华讯云

    0 粉丝0 提问7 回答
  • gulu丶咕噜

    0 粉丝1 提问5 回答
  • 卓脑域名

    0 粉丝0 提问3 回答
  • 女淘日记

    杭州吱吱吱科技 · 站长 (已认证)

    1 粉丝1 提问3 回答

扫码关注云+社区

领取腾讯云代金券