10進数の数値から2進数表現の文字列に変換する
Ruby では Fixnum#to_s メソッドに 2 を引数として与えると、2進数表現の文字列になる。 こんな機能あったんだ、知らなかった。
2.1.1 :001 > 5.to_s
=> "5"
2.1.1 :002 > 5.to_s(2)
=> "101"
引数は 2 じゃなくてもいい。整数 n を与えると n を基数とした数値表現になる。
2.1.1 :003 > 5.to_s(10)
=> "5"
2.1.1 :004 > 15.to_s(16)
=> "f"
2.1.1 :005 > 36.to_s(36)
=> "10"
2.1.1 :006 > 36.to_s(37)
ArgumentError: invalid radix 37
from (irb):6:in `to_s'
from (irb):6
from /home/takatoh/.rvm/rubies/ruby-2.1.1/bin/irb:11:in `<main>'
基数36までは OK で、37になるとダメみたいだ。 一方、Python では2進数に変換する bin 関数がある。
>>> bin(5)
'0b101'
頭に 0b がついてしまうので、とってやる。
>>> bin(5)[2:]
'101'
ちなみに、8進数にするには oct、16進数にするには hex 関数がある。
>>> oct(15)
'017'
>>> hex(15)
'0xf'
