Module: Neb::BaseConvert
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
- #convert(s, from, to, minlen = 0) ⇒ Object
- #decode(s, base) ⇒ Object
- #encode(v, base, minlen = 0) ⇒ Object
- #symbols(base) ⇒ Object
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 |