Ruby convert non-printable characters into numbers

non-printing-characters, regex, ruby, string

Solution

String#gsub, String#gsub! accept optional block. The return value of the block is used for substitution.

"\x01Hello\x02".gsub(/[^[:print:]]/) { |x| x.ord }
# => "1Hello2"

Problem

I have a string with non-printable characters. What I am currently doing is replacing them with a tilde using: ``` string.gsub!(/^[:print:]]/, "~") ``` However, I would actually like to convert them to their integer value. I tried this, but it always outputs `0` ``` string.gsub!(/[^[:print:]]/, "#{$1.to_i}") ``` Thoughts?

Original source