我想知道将 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/