2014-09-18 72 views
2

假設我們有一個64個字符的字符串來表示Ruby Float的位。這些位以大端順序排列。舉例來說,這個字符串是12.125:如何將Ruby比特串轉換爲Float?

"0100000000101000010000000000000000000000000000000000000000000000" 

我想這#unpack回相應的Float(即,答案應該是[12.125])。什麼是最好的方式來做到這一點?

回答

2

我卷繞解釋的字符串作爲一個長的無符號整數,包裝該整數的字節,然後拆包相應的浮子:

s = "0100000000101000010000000000000000000000000000000000000000000000" 
[s].pack("B*").unpack("G") #=> [12.125] 

[編輯:修改爲包括Alex的建議]

2

你提供的答案很好,但如果你想跳過轉換爲int,你也可以做

s = "0100000000101000010000000000000000000000000000000000000000000000" 
[s].pack("B*").unpack("G") #=> [12.125] 
+0

不錯,我忘了'B *'!謝謝。 – 2014-09-18 23:04:33