2012-03-30 2 views
9

Можно создать дубликат:
Hex to binary in rubyDecode шестнадцатеричная строка в Рубине

В Python, я могу сделать следующее:

>>> str = '000E0000000000' 
>>> str.decode('hex') 
'\x00\x0e\x00\x00\x00\x00\x00' 

Если я должен достичь того же вывода в рубине, который я мог бы позвонить? Я пробовал to_s(16), который, похоже, не работает. Мне нужен выход, чтобы быть в этом конкретном формате, так что я ожидаю получить следующее:

"\\x00\\x0e\\x00\\x00\\x00\\x00\\x00" 
+0

Возможно, это решение? [http://stackoverflow.com/questions/84421/converting-an-integer-to-a-hexadecimal-string-in-ruby][1] [1]: HTTP: //stackoverflow.com/questions/84421/converting-an-integer-to-a-hexadecimal-string-in-ruby – Stony

+0

[str] .pack ('H *') => "\ 000 \ 016 \ 000 \ 000 \ 000 \ 000 \ 000 " –

ответ

10
irb(main):002:0> [str].pack('H*') 
# => "\x00\x0E\x00\x00\x00\x00\x00" 

Or (Ruby 1.9 только):

irb(main):004:0> str.scan(/../).map(&:hex).map(&:chr).join 
# => "\x00\x0E\x00\x00\x00\x00\x00" 

Если вам нужна строка отформатированный:

irb(main):005:0> s = str.scan(/../).map { |c| "\\x%02x" % c.hex }.join 
=> "\\x00\\x0e\\x00\\x00\\x00\\x00\\x00" 
irb(main):006:0> puts s 
\x00\x0e\x00\x00\x00\x00\x00 
=> nil 
+0

i get =>" \ 000 \ 016 \ 000 \ 000 \ 000 \ 000 \ 000 "для вашего решения Я запускаю 1.8.7 ruby ​​ –

+0

@Pavan: Это правильно, «\ 000 \ 016" == "\ x00 \ x0e" ' –

+0

Проблема в том, что мне нужно получить формат \ x00, а не формат \ 000, поскольку приемник url ​​жалуется на недопустимый формат, тогда как python decode p rints \ x00 и приемник URL не жалуются на это –

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