2012-03-30 24 views
9

Mögliche Duplizieren:
Hex to binary in rubyDecode Hexadezimalstring in Ruby

In Python, ich folgendes tun:

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

Wenn ich die gleiche Leistung zu erreichen, haben in Ruby welchen Ruf könnte ich machen? Ich habe versucht to_s(16), die nicht zu funktionieren scheint. Ich brauche die Ausgabe in diesem spezifischen Format zu sein, also erwarte ich folgendes zu erhalten:

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

Vielleicht ist dies die Lösung? [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 " –

Antwort

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

Or (Ruby 1.9 only):

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

Wenn Sie die Zeichenfolge formatiert:

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

Ich bekomme =>" \ 000 \ 016 \ 000 \ 000 \ 000 \ 000 \ 000 "für Ihre Lösung Ich habe 1.8.7 Ruby ausgeführt –

+0

@Pavan: Was ist richtig, das sieht' "\ 000 \ 016" == "\ x00 \ x0e" ' –

+0

Problem ist, dass ich das \ x00-Format und nicht \ 000-Format bekommen muss, da der URL-Empfänger sich über ungültiges Format beschwert, während der Python-Decoder p rints \ x00 format und der url empfänger klagt nicht –