2016-02-25 1 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)
  • Array#pack('N*') является обратным String#unpack('N*')
  • String#unpack('S*') является обратным Array#pack('S*')
+0

Я работаю, спасибо! –

Смежные вопросы