Comment puis-je convertir un hexagone ruby / double en hexadécimal haut avec des octets hauts et bas.Comment convertir un double en hexadécimal?
Exemple:
start with 99.0
fin
avec
40 58 C0 00 00 00 00 00
high bytes low bytes
Comment puis-je convertir un hexagone ruby / double en hexadécimal haut avec des octets hauts et bas.Comment convertir un double en hexadécimal?
Exemple:
start with 99.0
fin
avec
40 58 C0 00 00 00 00 00
high bytes low bytes
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
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]