ruby - 如何使用 Ruby 将 float 转换为二进制字符串,反之亦然?

标签 ruby string binary floating-point

我想知道将 float 转换为二进制字符串以及将二进制字符串转换为 float 的最佳方法。

我正在使用遗传算法,我需要将 float 的二进制表示形式保存在 [0-1] 范围内,因此我还需要知道 Ruby 用于保存 float 的位数内存。

我试图用 String#Unpack 方法解决这个问题,但我得到了一个奇怪的结果:

binary_string_number = "0" * 32
=> "00000000000000000000000000000000" 
binary_string_number.unpack("F")
=> [6.409690556097303e-10]

结果应该是 0.0 对吧?我不明白这种行为。

谢谢!

最佳答案

我认为您需要先打包您的字符串,然后再尝试将其解包为 float 。您得到的基本上是一个代表一系列位的字符串,但不是您尝试读取的实际位(如果我正确理解您的问题)。

["0" * 32].pack("b*")                        # => "\x00"
["0" * 32].pack("b*").unpack("F")            # => "\x00".unpack("F") => 0.0
["11".rjust(32, "0")].pack("b*").unpack("F") # => -2.0

不过,我不是这方面的专家。

关于ruby - 如何使用 Ruby 将 float 转换为二进制字符串,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7485295/

相关文章:

c++ - 在结构中存储可变大小的字符串

windows - 如何使用 VirtualBox 创建 VM 的可再发行自包含二进制发行版?

haskell - 从字节串中获取任意位片

ruby - Nokogiri:控制新子元素的元素前缀

ruby - 如何使带有 Hstore 的 PostgreSQL 在 Sinatra 简单应用程序中工作?

ruby - 基于 Ruby 语法的未定义局部变量

ruby - 取消转义 Ruby 字符串中的特殊字符序列

ruby - irb 中的 awesomeprint 无法识别

c# - 如何将数字字符串排序为数字?

python - 在python中将字符串转换为二进制数