module BCD

encoding: utf-8

Public Class Methods

parse(value) click to toggle source
# File lib/rdoba/bcd.rb, line 27
def self.parse value
  if value < 0
    raise ParseError; end
  res = BCDString.new
  if res.respond_to? :force_encoding
    res.force_encoding( 'ASCII-8BIT' ); end
  if value > 0
    part = nil
    while value > 0
      ( value, mod ) = value.divmod 10
      if part
        res << ( ( mod << 4 ) | part ).chr
        part = nil
      else
        part = mod; end; end
    if part
      res << part.chr; end
  else
    res << 0.chr; end
  res; end

Public Instance Methods

pow(value, mul) click to toggle source
# File lib/rdoba/bcd.rb, line 15
def pow value, mul
  if value >= 10
    raise ConvertError; end
  value * mul
end
to_i() click to toggle source
# File lib/rdoba/bcd.rb, line 11
def to_i
  res = 0
  mul = 1
  self.each_byte do |c|
    def pow value, mul
      if value >= 10
        raise ConvertError; end
      value * mul
    end
    res += pow( c.ord & 0xF,  mul )
    mul *= 10
    res += pow( c.ord >> 4, mul )
    mul *= 10
  end
  res; end