如何在Ruby中将64位二进制字符串转换为双精度浮点数?

3
我想知道如何在Ruby中将64位二进制字符串转换为双精度浮点数。我拥有的字符串如下:
binaryString = "0011111111110000000000000000000000000000000000000000000000000000"

使用在线转换器(http://www.binaryconvert.com/convert_double.html?),我知道该值应为1.0。然而,我试图使用Ruby的unpack函数转换为double类型,但结果不正确。

double_value = binaryString.unpack("G")

给我双精度变量double_value = 1.3983819593719592e-76

我尝试了其他指令,如"F"和"D",但都没有得出正确的结果。

有什么想法我做错了什么吗?谢谢你的帮助!


1
可能 binaryString 是一个字符串,所以你需要在右边加上引号。(按照现有的写法,binaryString 是一个整数,其数字都是零和一,并且前两个零没有任何意义)。如果它是一个字符串,为什么不使用它的整数值,binaryString.to_i(2) # => 4607182418800017408?你需要编辑问题来进行更正或澄清。 - Cary Swoveland
感谢您的回复和建议。我添加了引号以显示binaryString实际上是一个字符串。我没有使用整数值,因为我知道根据在线转换器,binaryString正确地表示了1.0的双精度值。我正在尝试让Ruby将其转换为正确的值。我希望有一种方法可以使Ruby从给定的binaryString中产生1.0的值。 - Z. Nahman
1个回答

3

unpack 函数需要二进制数据,所以你必须首先使用 B 将位字符串打包:

b = '0011111111110000000000000000000000000000000000000000000000000000'

[b].pack('B*').unpack1('G')
#=> 1.0

运行得非常好。感谢您的帮助! - Z. Nahman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接