2014-04-09 13 views
18

Ho una stringa contenente valori di codice esadecimale di caratteri ASCII, ad es. "666f6f626172". Voglio convertirlo nella stringa corrispondente ("foobar").Converti stringa con codici ASCII esadecimali in caratteri

Questo è il lavoro ma brutto:

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

Esiste un modo migliore (più conciso)? Potrebbe unpack essere utile in qualche modo?

+7

come '[ "666f6f626172"] pack ('H *')'.? – Stefan

+1

@Stefan. Si Così. Potresti postare questo come risposta? –

risposta

36

È possibile utilizzare Array#pack:

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

H è la direttiva per una stringa esadecimale (nibble alto prima).

+15

'pack' /' unpack' rimarrà per me un mistero per sempre. –

14

Stefan ha inchiodato, ma qui è un'alternativa si consiglia di infilare via per un altro tempo e luogo:

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