Domanda

I have a string containing hex code values of ASCII characters, e.g. "666f6f626172". I want to convert it to the corresponding string ("foobar").

This is working but ugly:

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

Is there a better (more concise) way? Could unpack be helpful somehow?

È stato utile?

Soluzione

You can use Array#pack:

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

H is the directive for a hex string (high nibble first).

Altri suggerimenti

Stefan has nailed it, but here's an alternative you may want to tuck away for another time and place:

"666f6f626172".gsub(/../) { |pair| pair.hex.chr } # => "foobar"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top