2016-02-25 1 views
1

J'ai une paire d'entiers de 32 bits en format Little-Endian et je dois transformer en valeur hexadécimale et inverser le processus. Je sais comment transformer en hexadécimal mais j'ai des problèmes pour revenir à l'entier.Pack et déballer une paire d'entiers hexadécimal

h = [15325,24748] 

i = h.pack("S*").unpack('N*').first 
=> 3711675488 

hex-value = i.to_s(16) 
=> "dd3bac60" 

Maintenant, comment puis-je transformer "dd3bac60" retour à [15325,24748]?

Merci

+0

Notez ceux qui regardent comme ils sont traités comme des entiers de 16 bits, et non 32 bits. Le résultat final est un nombre de 32 bits exprimé en hexadécimal. –

Répondre

1

Il suffit de faire tout dans l'ordre inverse, et inverser votre sac/logique Déballez:

hex_string = "dd3bac60" 
[hex_string.to_i(16)].pack('N*').unpack('S*') 
    => [15325, 24748] 

Explication: Chaque fonction que vous appliquez dans votre transformation vers l'avant a l'inverse, si juste les appliquer l'ordre inverse:

  • String#to_i(base) est inverse de Integer.to_s(base)
  • Array#pack('N*') est inverse de String#unpack('N*')
  • String#unpack('S*') est inverse de Array#pack('S*')
+0

Je travaille, merci !! –