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'