サイロスです。

ARIMA Yasuhiro <fit0298 / fitec.co.jp>さん:
> 有馬です。
> 
> format を使うとこんな感じかな。
> 
> class Integer
>   def to_x
>     format "0x%x", self
>   end
> end
> 
> p 123.to_x

matz / ruby-lang.org (Yukihiro Matsumoto)さん:
> まつもと ゆきひろです
> 
>   class Integer
>     def to_x
>       sprintf("0x%x", self)
>     end
>   end
> 
> じゃだめ?

あ・・・・・。
formatとsprintfの存在を知らなかった・・・。
明らかに勉強不足でした。
すみません。

ただ、今回は一桁ずつ求めるというアルゴリズムでスマートなコードを出力する
目的で練習をしようと考えていましたので、知っていても使わなかったと思いま
す(ちゃんとメソッドを調べて断りを入れておくべきでした)。

KUMAKURA <mitsuakik / po.mmm.ne.jp>さん:
> くまくらと申します。
> 
> class Integer
>   def to_x
>     hex = %w(0 1 2 3 4 5 6 7 8 9 a b c d e f)
>     str = ""
>     tmp = self.dup
>     begin
>       val = tmp % 16
>       str = hex[val] + str 
>       tmp /= 16
>     end while 0 < tmp
>     str = "0x" + str
>   end
> end
そうか、ヘタに16進数の桁数を求めるよりも、下の桁から付けていったほうが
よりシンプルになりますね。なるほど。

"Akinori MUSHA" <knu / iDaemons.org>さん:
> At Sat, 15 Sep 2001 23:52:44 +0900,
> 
> def to_x(n)
>   if n.zero?
>     str = '0'
>   else
>     str = ''
> 
>     while n > 0
>       str[0,0] = %w(0 1 2 3 4 5 6 7 8 9 a b c d e f)[n & 0xf]
>       n >>= 4
>     end
>   end
> 
>   '0x' + str
> end
あ、こういう方法があるんですか。%wでできるものもオブジェクトだから、直接
[]で参照ができるわけですね。で、str[0,0]だから、strの先頭に挿入されるわ
けですね。

いやはや、みなさん僕のぶしつけな質問に対してご教授していただいてありがと
うございます。非常に参考になりました。

ありがとうございました。

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

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

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