解1) 元の意図を汲むなら:

class Integer
  def to_x
    str = ''

    x = self

    while x > 0
      str << %w(0 1 2 3 4 5 6 7 8 9 a b c d e f)[x & 0xf]
      x >>= 4
    end

    '0x' + ('00' + str)[-2..-1]
  end
end

puts ?\C-a.to_x


解2) 最適解は:

puts '0x%02x' % ?\C-a

でしょうか。(cf. printf(), sprintf(), format(), String#%)


 なお、アルゴリズムはおいておくとして、一時的にしか使わない
変数をインスタンス変数 (@var) にするのはちょっと変です。

 また、二桁固定で 0x 付き、という特殊なものを Integer に追加
するのは感心しません。今回の場合はたまたま汎用的でぴったりの
機能が Ruby にあったわけですが、なかった場合も Integer に追加
するのではなく、プライベートメソッドにするか、それを頻繁に使う
クラスのクラスメソッドにするべきだと思います。

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"Freeze this moment a little bit longer, make each impression
  a little bit stronger..  Experience slips away -- Time stand still"