将二进制字符串转换为IEEE 754 float

时间:2017-01-08 20:56:12

标签: ruby

有人可以告诉我如何在Ruby中将32位二进制字符串转换为IEEE 754浮点值吗?

例如,二进制字符串" 01000001100101110011001100110011" (0x41973333)应该转换为18.9,但我无法弄清楚如何使用Ruby来做到这一点。

我试图获得相同的值:https://www.h-schmidt.net/FloatConverter/IEEE754.html

感谢。

1 个答案:

答案 0 :(得分:4)

那是一个有趣的人!

您需要String#unpackArray#pack

["01000001100101110011001100110011"].pack('B*').unpack('g').first
#=> 18.899999618530273
[18.9].pack('g').unpack('B*').first
#=> "01000001100101110011001100110011"

'g'是:

 g         | Float   | single-precision, network (big-endian) byte order

'B*'是多个:

B         | String  | bit string (MSB first)