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?
sprintf() will convert your presumably binary data to an ASCII hex string or a decimal hex string.
You can use Array#pack
:
["666f6f626172"].pack('H*') #=> "foobar"
H
is the directive for a hex string (high nibble first).
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"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With