2009-04-08 8 views

Répondre

6

Eh bien, like Patrick said, il ne prend pas beaucoup pour convertir passé en utilisant 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"] 

Cela dépend si vous voulez décompresser avec l'octet de poids fort dans l'indice zéro ou l'octet de poids faible dans l'indice zéro:

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

La classe de tableau a une méthode pack:

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

Cela vous donne une chaîne d'octets, mais la conversion de celui hex pour l'impression devrait être trivial.

Si vous voulez aller dans l'autre sens, la classe chaîne a une méthode Déballez:

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