読者です 読者をやめる 読者になる 読者になる

Ruby で PHP の base_convert() のような基数変換を簡単に実装してみる

基数変換は、ハッシュやキーなどの処理で必要になることがある。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"