2016-02-25 77 views
1

我有一對32位整數Little-Endian格式,我必須轉換爲十六進制值,並逆轉過程。 我知道如何轉換爲十六進制,但我有問題要回到整數。打包並解壓縮一對整數到十六進制

h = [15325,24748] 

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

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

現在,我該如何轉換「dd3bac60」回到[15325,24748]?

感謝

+0

注逆那些看起來他們被視爲16比特整數,不是32位。最終結果是以十六進制表示的32位數字。 –

回答

1

只要做到以相反的順序一切,反轉你的揹包/解壓縮邏輯:

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

說明:您在您的正向轉換應用的每個功能具有逆,所以只適用於他們相反的順序:

  • String#to_i(base)Integer.to_s(base)
  • 01逆是String#unpack('N*')
  • String#unpack('S*')逆是Array#pack('S*')
+0

我的作品,謝謝! –