基数変換は、ハッシュやキーなどの処理で必要になることがある。php では base_convert 関数があるので簡単だ。
Ruby にはないのかと思っていたら String, Integer クラスの to_i, to_s にはそれぞれ基数を引数に渡せることがわかった。よって、この二つを組み合わせれば簡単に実装可能だ。
base_convert.rb
2 から 36 進数まで対応できる。
def base_convert(strnum, from, to)
return strnum.to_i(from).to_s(to)
end
irb で試す
irb(main):001:0> require “base_convert”
=> true
irb(main):002:0> base_convert(“1111”, 2, 16)
=> “f”
irb(main):003:0> base_convert(“11111111”, 2, 16)
=> “ff”
irb(main):004:0> base_convert(“FF”, 16, 2)
=> “11111111”
irb(main):005:0> base_convert(“f”, 16, 2)
=> “1111”
irb(main):006:0> base_convert(“ffff”, 16, 36)
=> “1ekf”
irb(main):007:0> base_convert(“1ekf”, 36, 10)
=> “65535”