2012-03-30 26 views
9

Duplicar posibles:
Hex to binary in rubyDecode cadena hexadecimal en Ruby

En Python, puede hacer lo siguiente:

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

Si tengo que lograr el mismo resultado en ruby, ¿qué llamada podría hacer? Intenté to_s(16), que no parece funcionar. Necesito que la salida sea en ese formato específico, por lo que espero conseguir lo siguiente:

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

Quizás esta es la solución? [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 " –

Respuesta

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

O (Ruby 1.9 solamente):

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

Si necesita la cadena con formato:

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

me sale =>" \ 000 \ 016 \ 000 \ 000 \ 000 \ 000 \ 000 "para su solución Estoy ejecutando 1.8.7 ruby ​​ –

+0

@Pavan: Lo cual es correcto, ya que' "\ 000 \ 016" == "\ x00 \ x0e" ' –

+0

Problema es que necesito obtener el formato \ x00 y no \ 000, ya que el receptor de la url se queja de un formato no válido mientras que el decodificador python p el formato rints \ x00 y el receptor de la url no se quejan por eso –