2009-04-08 162 views
5

如何將ruby float/double轉換爲高字節和低字節的高端hex。如何將double轉換爲hex?

實施例:

start with 99.0 

端了

40 58 C0 00 00 00 00 00 
high bytes low bytes 

回答

6

好,like Patrick said,它並不需要大量使用Array\#pack轉換過去。

irb> [99.0].pack('G').split('').map { |ds| ds[0] } 
#=> [64, 88, 192, 0, 0, 0, 0, 0] 
irb> _.map { |d| "%02x" % d } 
#=> ["40", "58", "c0", "00", "00", "00", "00", "00"] 
irb> [99.0].pack('E').split('').map { |ds| ds[0] } 
#=> [0, 0, 0, 0, 0, 192, 88, 64] 
irb> _.map { |d| "%02x" % d }  
#=> ["00", "00", "00", "00", "00", "c0", "58", "40"] 

所以這取決於你是否想在零指數高位字節或零指數低位字節將它解開:

 E  | Double-precision float, little-endian byte order 
     G  | Double-precision float, network (big-endian) byte order 
0

陣列類有一個包的方法:

a = [99.0] 
s = a.pack("d") 
s 
=> "\000\000\000\000\000\[email protected]" 

這給你一個字節串,但是從轉化爲十六進制打印應該是微不足道的。

如果你想要去的其他方式,串類有一個解壓方法:

s.unpack("d") 
=>[99.0]