class MrbParser::CRC

calculate CRC

an Ruby port of src/crc.c in mruby

Constants

CHAR_BIT
CRC_16_CCITT
CRC_CARRY_BIT
CRC_XOR_PATTERN

Public Class Methods

calc_crc_16_ccitt(data0, nbytes, crc) click to toggle source
# File lib/mrb_parser/crc.rb, line 15
def self.calc_crc_16_ccitt(data0, nbytes, crc)
  data = data0.unpack("C*")
  crcwk = crc << 8
  for ibyte in 0...nbytes
    crcwk |= data[ibyte]
    for ibit in 0...CHAR_BIT
      crcwk <<= 1
      carry = crcwk & CRC_CARRY_BIT
      if carry.nonzero?
        crcwk ^= CRC_XOR_PATTERN
      end
    end
  end
  return crcwk >> 8
end