Module: Ethereum::BaseConvert
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) ⇒ Object
- #symbols(base) ⇒ Object
Instance Method Details
#convert(s, from, to, minlen = 0) ⇒ Object
21 22 23 24 |
# File 'lib/ethereum/base_convert.rb', line 21 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
38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/ethereum/base_convert.rb', line 38 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) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/ethereum/base_convert.rb', line 26 def encode(v, base, minlen) 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
17 18 19 |
# File 'lib/ethereum/base_convert.rb', line 17 def symbols(base) BaseSymbols[base] or raise ArgumentError, "invalid base!" end |