2014-04-09 13 views
18

Ich habe eine Zeichenfolge, die Hex-Code-Werte von ASCII-Zeichen, z. "666f6f626172". Ich möchte es in den entsprechenden String ("foobar") konvertieren.Konvertieren Zeichenfolge mit Hex ASCII-Codes zu Zeichen

Dies funktioniert, aber hässlich:

"666f6f626172".scan(/../).map(&:hex).map(&:chr).join # => "foobar" 

Gibt es eine bessere (prägnante) Art und Weise? Könnte unpack irgendwie hilfreich sein?

+7

wie '[ "666f6f626172"] Pack ('H *')'.? – Stefan

+1

@Stefan. Ja genau so. Könnten Sie das bitte als Antwort posten? –

Antwort

36

Sie können Array#pack verwenden:

["666f6f626172"].pack('H*') 
#=> "foobar" 

H ist die Richtlinie für einen Hex-String (High-Nibble zuerst).

+15

'pack' /' entpacken' bleibt für immer ein Geheimnis für mich. –

14

Stefan hat es genagelt, aber hier ist eine Alternative, die Sie für eine andere Zeit und Ort wünschen können zum Verstauen:

"666f6f626172".gsub(/../) { |pair| pair.hex.chr } # => "foobar" 
Verwandte Themen