2013-01-12 21 views
-4

這裏的任何人都可以幫我理解下面的浮點指令是如何在使用packing() and unpacking()方法的Ruby中工作的嗎?浮點指令如何在Ruby包裝()/ unpacking()中工作?

  • D and d
  • F and f
  • g and G
  • e and E

我已經試過如下:

irb(main):001:0> [2,44,43].pack('D') 
=> "\x00\x00\x00\x00\x00\x00\[email protected]" 
irb(main):002:0> [2,44,43].pack('d') 
=> "\x00\x00\x00\x00\x00\x00\[email protected]" 
irb(main):004:0> [2,44,43].pack('ddd') 
=> "\x00\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\ 
[email protected]" 
irb(main):005:0> [2,44,43].pack('fff') 
=> "\x00\x00\[email protected]\x00\x000B\x00\x00,B" 
irb(main):006:0> [2,44,43].pack('FFF') 
=> "\x00\x00\[email protected]\x00\x000B\x00\x00,B" 
irb(main):007:0> [2,44,43].pack('ggg') 
=> "@\x00\x00\x00B0\x00\x00B,\x00\x00" 
irb(main):008:0> [2,44,43].pack('GGG') 
=> "@\x00\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\[email protected]\x80\x00\x00\x00\x0 
0\x00" 
irb(main):009:0> 

輸出結果如何?這種計算的邏輯是什麼?

在此先感謝!

+2

哪一部分[文件](HTTP的: //ruby-doc.org/core-1.9.3/String.html#method-i-unpack)你有麻煩嗎? –

+0

是的,他們只是用示例顯示了一些指令,但並非全部列出。所以作爲這個ruby平臺的新手,我真的很想知道這些工作到底如何,他們的邏輯是什麼? –

+1

您是否嘗試將它們與六角自卸車結合使用?它們的工作方式與在Python和Perl中的工作方式相同:它們將原生類型轉換爲原始位和從原始位轉換。 –

回答

1

這些指令將數組中的數字轉換爲浮點字節表示形式。

如果您想了解發生了什麼,你可以看這個視頻:

浮點表示:例
https://www.youtube.com/watch?v=t-8fMtUNX1A

而且閱讀這篇文章:
http://www.geeksforgeeks.org/floating-point-representation-basics/

通過谷歌我通過searching for "floating point representation"找到了上述答案。


只給你一個例子:

> [2.0].pack('f').bytes.map(&:to_i) 
=> [0, 0, 0, 64] 

這是一個以十六進制表示爲浮點數:

0x40000000 

在那裏你可以看到640x40在十六進制。

爲了理解爲什麼2.0變成0x40000000您必須瞭解計算機如何將浮點數轉換爲二進制表示形式。

您可以使用此頁面來測試一下:
http://www.h-schmidt.net/FloatConverter/IEEE754.html

例如這裏是什麼樣子的2.0

http://i.imgur.com/qWqFM.png

+0

不,我給你一個帖子,看看有人如何回答這個帖子。我沒有找到我的上述帖子的任何答案,因此張貼。看看解釋。請不要投下我! [交](http://stackoverflow.com/questions/14294988/how-the-x-x-directives-work-with-ruby-pack-unpack-method)。 –

+1

@PythonLikeYOU我讀了這個答案。這不能簡單地回答。請觀看視頻(10分鐘),你會發現它並不那麼簡單。 – Casper

+0

好吧!讓它打開然後,希望任何人一定可以在這裏回答,不要投票,它使我的帖子不好看!順便說一句我正在看視頻! –