2012-03-30 16 views
9

Eventuali duplicati:
Hex to binary in rubyDecode stringa esadecimale in Ruby

In Python, posso effettuare le seguenti operazioni:

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

Se devo ottenere lo stesso risultato in rubino quale chiamata potrei fare? Ho provato to_s(16), che non sembra funzionare. Ho bisogno l'uscita di essere in quel formato specifico, quindi mi aspetto di ottenere il seguente:

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

Forse questa è la soluzione? [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 " –

risposta

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

Or (Ruby 1.9 solo):

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

Se avete bisogno della stringa formattata:

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

ottengo =>" \ 000 \ 016 \ 000 \ 000 \ 000 \ 000 \ 000 "per la tua soluzione Sto correndo 1.8.7 rubino –

+0

@Pavan: che è corretto, visto che' "\ 000 \ 016" == "\ x00 \ x0e" ' –

+0

problema è che ho bisogno di ottenere il formato \ x00 e non il formato \ 000 come il ricevitore url si lamenta di un formato non valido mentre il python decodifica p rints \ x00 format e il ricevitore url non si lamenta per quello –