Module: Neb::BaseConvert

Extended by:
BaseConvert
Included in:
BaseConvert
Defined in:
lib/neb/base_convert.rb

Overview

Constant Summary collapse

BaseSymbols =
{
  2   => '01'.freeze,
  10  => '0123456789'.freeze,
  16  => '0123456789abcdef'.freeze,
  32  => 'abcdefghijklmnopqrstuvwxyz234567'.freeze,
  58  => '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'.freeze,
  256 => 256.times.map {|i| i.chr }.join.freeze
}.freeze

Instance Method Summary collapse

Instance Method Details

#convert(s, from, to, minlen = 0) ⇒ Object



25
26
27
28
# File 'lib/neb/base_convert.rb', line 25

def convert(s, from, to, minlen = 0)
  return Utils.lpad(s, symbols(from)[0], minlen) if from == to
  encode(decode(s, from), to, minlen)
end

#decode(s, base) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/neb/base_convert.rb', line 42

def decode(s, base)
  syms = symbols(base)
  s = s.downcase if base == 16

  result = 0
  while s.size > 0
    result *= base
    result += syms.index(s[0])
    s = s[1..-1]
  end

  result
end

#encode(v, base, minlen = 0) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/neb/base_convert.rb', line 30

def encode(v, base, minlen = 0)
  syms = symbols(base)

  result = ''
  while v > 0
    result = syms[v % base] + result
    v /= base
  end

  Utils.lpad(result, syms[0], minlen)
end

#symbols(base) ⇒ Object



21
22
23
# File 'lib/neb/base_convert.rb', line 21

def symbols(base)
  BaseSymbols[base] or raise ArgumentError, "invalid base!"
end