サイロスです。

ようやく、「プログラミングRuby」の第1部を読み終え、一つオリジナルのメソ
ッドを作ろうかと考え、整数クラスの値を0xで始まる16進数の文字列に変換す
るメソッドto_xを作りました。

メソッド内では、値が16の何乗かを求め、その乗数でループして各桁の値を求
める様に考えてコーディングしましたが、実際できあがったものを見ると、かな
り不細工なものになってしまいました。

できることなら、もっとスマートにしたいのですが、僕の少ない頭脳ではこれが
精一杯です。

MLの皆様、このコードをもっとスマートに実現する方法をご教授お願いします。

class Integer
  def to_x
    @HEX = %w(0 1 2 3 4 5 6 7 8 9 a b c d e f)
    @max = (Math::log10(self) / Math::log10(16)).to_i
    @str = "0x"
    @tmp = self.dup
    @max.downto(0) do |i|
      @val = @tmp / (16**i)
      @str += @HEX[@val]
      @tmp %= 16**i
    end
    @str
  end
end

a = ?\C-a
b = ?\M-a
c = ?\M-\C-a
print "#{a.to_x}:#{b.to_x}:#{c.to_x}\n"

==============================

 サイロス誠
 cyross / po.twin.ne.jp
 http://www.twin.ne.jp/~cyross/

==============================