2014-02-06 71 views
0

我想将浮点数转换为二进制字符串并返回。浮动到二进制<->二进制浮动转换

我尝试这样做:

import struct 
from ast import literal_eval 


float_to_binary = bin(struct.unpack('!i',struct.pack('!f', 3.14))[0]) 
print (float_to_binary) 

binary_to_float = float(int(float_to_binary, 0)) 
print (binary_to_float) 


result = float(literal_eval(float_to_binary)) 
print (result) #wrong, prints 1078523331.0, should be 3.14 

回答

1

这不会做你认为:

binary_to_float = float(int(float_to_binary, 0)) 

它不会重新解释数据,而是将整数浮动,例如12341234.0

你可以使用:

>>> from struct import * 
>>> 
>>> # float -> binary 
>>> bin(unpack('I', pack('f', 3.14))[0]) 
'0b1000000010010001111010111000011' 
>>> 
>>> 
>>> # binary -> float 
>>> unpack('f', pack('I', 0b1000000010010001111010111000011))[0] 
(3.140000104904175,) 
>>> 
+0

冷静一点,虽然当我使用的变量,像这样: original_float = 3.14 binary_string = INT(斌(解压缩( '我',包( 'F', float_value = unpack('f',pack('I',binary_string))[0] 不起作用。 ValueError:int()的无效字面量,基数为10:'0b1000000010010001111010111000011' – andandandand

+0

@omgzor您需要通过'int(...,2)'告诉'int'该字符串中的整数是基数2的整数,所以它应该是'binary_string = int(bin(unpack('I',pack('f',original_float))[0]),2)'。如果你只是对base 10的值''binary_string = unpack('I',pack('f',original_float))[0]'感兴趣,你可以删除int(bin(...),2)'。 – 2014-02-06 19:08:22