gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:15:46 25 4
gpt4 key购买 nike

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

>>> 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]) 将引用可打印数据 block 转换回二进制并返回二进制数据。但最终,我得到了同样的错误:

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

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

最佳答案

在您的一条评论中,您指出二进制数表示 8 字节长的 IEEE 754 binary64 格式的 float 。但是,这与您作为示例显示的 -0b1110 值不一致,因此我忽略了它并使用了我自己的格式正确的示例输入数据来测试下面显示的答案。

基本上所做的是首先将二进制字符串转换为整数值,然后将原始字节字符串传递给 struct.unpack() 以最终转换为 float 值(value)。下面显示的 bin_to_float() 函数驱动该过程。尽管未说明,二进制输入字符串参数可以以 '0b' 为前缀。

from codecs import decode
import struct


def bin_to_float(b):
""" Convert binary string to a float. """
bf = int_to_bytes(int(b, 2), 8) # 8 bytes needed for IEEE 754 binary64.
return struct.unpack('>d', bf)[0]


def int_to_bytes(n, length): # Helper function
""" Int/long to byte string.

Python 3.2+ has a built-in int.to_bytes() method that could be used
instead, but the following works in earlier versions including 2.x.
"""
return decode('%%0%dx' % (length << 1) % n, 'hex')[-length:]


def float_to_bin(value): # For testing.
""" Convert float to 64-bit binary string. """
[d] = struct.unpack(">Q", struct.pack(">d", value))
return '{:064b}'.format(d)


if __name__ == '__main__':

for f in 0.0, 1.0, -14.0, 12.546, 3.141593:
print('Test value: %f' % f)
binary = float_to_bin(f)
print(' float_to_bin: %r' % binary)
floating_point = bin_to_float(binary) # Round trip.
print(' bin_to_float: %f\n' % floating_point)

输出:

Test value: 0.000000
float_to_bin: '0000000000000000000000000000000000000000000000000000000000000000'
bin_to_float: 0.000000

Test value: 1.000000
float_to_bin: '0011111111110000000000000000000000000000000000000000000000000000'
bin_to_float: 1.000000

Test value: -14.000000
float_to_bin: '1100000000101100000000000000000000000000000000000000000000000000'
bin_to_float: -14.000000

Test value: 12.546000
float_to_bin: '0100000000101001000101111000110101001111110111110011101101100100'
bin_to_float: 12.546000

Test value: 3.141593
float_to_bin: '0100000000001001001000011111101110000010110000101011110101111111'
bin_to_float: 3.141593

关于python - 如何将二进制(字符串)转换为浮点值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8751653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com