Подтвердить что ты не робот

Преобразование строки с шестнадцатеричными кодами ASCII в символы

У меня есть строка, содержащая значения шестнадцатеричного кода символов ASCII, например. "666f6f626172". Я хочу преобразовать его в соответствующую строку ("foobar").

Это работает, но уродливо:

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

Есть ли лучший (более сжатый) способ? Может ли unpack быть полезным каким-то образом?

4b9b3361

Ответ 1

Вы можете использовать Array#pack:

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

H - это директива для шестнадцатеричной строки (сначала сперва).

Ответ 2

Стефан прибил его, но вот альтернатива, которую вы можете захотеть уложить в другое время и место:

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