如何将 64 位二进制字符串转换为 ruby​​ 中的双浮点数?

Posted

技术标签:

【中文标题】如何将 64 位二进制字符串转换为 ruby​​ 中的双浮点数?【英文标题】:How to convert 64 bit binary string to a double float in ruby? 【发布时间】:2018-06-21 16:24:09 【问题描述】:

我想知道如何将 64 位二进制字符串转换为 ruby​​ 中的双浮点数。我拥有的字符串如下:

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”,但没有一个产生正确的结果。

任何想法我做错了什么?感谢您的帮助!

【问题讨论】:

想必binaryString是一个字符串,所以右边需要加引号。 (如所写,binaryString 是一个整数,其数字全为 0 和 1,其两个前导零没有意义)如果它是一个字符串,为什么不使用它的整数值,binaryString.to_i(2) # => 4607182418800017408?您需要编辑问题以更正或澄清。 感谢您的回复和建议。我添加了引号以表明 binaryString 实际上是一个字符串。我没有使用整数值,因为我知道 binaryString 正确地表示每个在线转换器的双精度值 1.0。我试图让红宝石转换为正确的值。我想要一些方法让给定的 binaryString 中的 ruby​​ yield 1.0。 【参考方案1】:

unpack 需要二进制数据,因此您必须先使用B pack 您的位字符串:

b = '0011111111110000000000000000000000000000000000000000000000000000'

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

【讨论】:

像魅力一样工作。感谢您的帮助!

以上是关于如何将 64 位二进制字符串转换为 ruby​​ 中的双浮点数?的主要内容,如果未能解决你的问题,请参考以下文章

C语言如何将64位整数转字符串

如何在 Ruby 中将字符串或整数转换为二进制?

如何在 Ruby 中将字符串或整数转换为二进制?

Python - 如何将 int 转换为表示 32 位十六进制数的字符串

base64加密原理

Base64编码详解