class BaseConverter class DecodeError < StandardError end def initialize(base = 16, digits = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") @digits = digits.split(//) @rdigits = Hash.new @digits.each_with_index {|d,i| @rdigits[d] = i} @base = if base == 0 or not base @digits.size else base end end def encode(int) sign = '' str = '' return @digits[0] if int == 0 raise ArgumentError, "Negative values not supported" if int < 0 while int > 0 rem = int % @base str = @digits[rem] + str int = ((int - rem) / @base) end str end def decode(str) begin int = 0 str.each_byte do |b| int = (int * @base) + @rdigits.fetch(b.chr) end int rescue IndexError raise DecodeError end end end