2009-04-08 22 views

Odpowiedz

6

dobrze, like Patrick said, nie potrzeba wiele, aby przekształcić przeszłość za pomocą 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"] 

Więc to zależy od tego, czy chcesz rozpakować go bajtu wyższego rzędu w indeksie zerowym lub niskim Byte Order w indeksie zero:

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

klasy Array ma metodę dodatku:

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

Daje to ciąg bajtów, ale konwersja od tego, do hex do drukowania powinien być trywialny.

Jeśli chcesz iść w drugą stronę, klasa ciąg ma rozpakować metody:

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