Reputation: 15954
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?
Upvotes: 33
Views: 30538
Reputation: 110675
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"
Upvotes: 23
Reputation: 114178
You can use Array#pack
:
["666f6f626172"].pack('H*')
#=> "foobar"
H
is the directive for a hex string (high nibble first).
Upvotes: 66