Module: BCD

Included in:
BCDString
Defined in:
lib/rdoba/bcd.rb

Defined Under Namespace

Classes: ConvertError, ParseError

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.parse(value) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 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

Instance Method Details

#to_iObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 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