public void Init(CRCCode CodingType) { switch (CodingType) { case CRCCode.CRC_CCITT: order = 16; direct = 1; polynom = 0x1021; crcinit = 0xFFFF; crcxor = 0; refin = 0; refout = 0; break; case CRCCode.CRC16: order = 16; direct = 1; polynom = 0x8005; crcinit = 0x0; crcxor = 0x0; refin = 1; refout = 1; break; case CRCCode.CRC32: order = 32; direct = 1; polynom = 0x4c11db7; crcinit = 0xFFFFFFFF; crcxor = 0xFFFFFFFF; refin = 1; refout = 1; break; } // Initialize all variables for seeding and builing based upon the given coding type // at first, compute constant bit masks for whole CRC and CRC high bit crcmask = ((((ulong)1 << (order - 1)) - 1) << 1) | 1; crchighbit = (ulong)1 << (order - 1); // generate lookup table generate_crc_table(); ulong bit, crc; int i; if (direct == 0) { crcinit_nondirect = crcinit; crc = crcinit; for (i = 0; i < order; i++) { bit = crc & crchighbit; crc <<= 1; if (bit != 0) { crc ^= polynom; } } crc &= crcmask; crcinit_direct = crc; } else { crcinit_direct = crcinit; crc = crcinit; for (i = 0; i < order; i++) { bit = crc & 1; if (bit != 0) { crc ^= polynom; } crc >>= 1; if (bit != 0) { crc |= crchighbit; } } crcinit_nondirect = crc; } }
public void Init(CRCCode CodingType) { switch(CodingType) { case CRCCode.CRC_CCITT: order = 16; direct=1; polynom=0x1021; crcinit = 0xFFFF; crcxor=0; refin =0; refout=0; break; case CRCCode.CRC16: order = 16; direct=1; polynom=0x8005; crcinit = 0x0; crcxor=0x0; refin =1; refout=1; break; case CRCCode.CRC32: order = 32; direct=1; polynom=0x4c11db7; crcinit = 0xFFFFFFFF; crcxor=0xFFFFFFFF; refin =1; refout=1; break; } // Initialize all variables for seeding and builing based upon the given coding type // at first, compute constant bit masks for whole CRC and CRC high bit crcmask = ((((ulong)1<<(order-1))-1)<<1)|1; crchighbit = (ulong)1<<(order-1); // generate lookup table generate_crc_table(); ulong bit, crc; int i; if (direct == 0) { crcinit_nondirect = crcinit; crc = crcinit; for (i=0; i<order; i++) { bit = crc & crchighbit; crc<<= 1; if (bit != 0) { crc^= polynom; } } crc&= crcmask; crcinit_direct = crc; } else { crcinit_direct = crcinit; crc = crcinit; for (i=0; i<order; i++) { bit = crc & 1; if (bit != 0) { crc^= polynom; } crc >>= 1; if (bit != 0) { crc|= crchighbit; } } crcinit_nondirect = crc; } }
/// <summary> /// /// </summary> /// <param name="CodingType"></param> public void Init(CRCCode CodingType) { switch (CodingType) { case CRCCode.CRC_CCITT: order = 16; direct = 1; polynom = 0x1021; crcinit = 0xFFFF; crcxor = 0; refin = 0; refout = 0; break; case CRCCode.CRC16: order = 16; direct = 1; polynom = 0x8005; crcinit = 0x0; crcxor = 0x0; refin = 1; refout = 1; break; case CRCCode.CRC32: order = 32; direct = 1; polynom = 0x4c11db7; crcinit = 0xFFFFFFFF; crcxor = 0xFFFFFFFF; refin = 1; refout = 1; break; } crcmask = ((((ulong)1 << (order - 1)) - 1) << 1) | 1; crchighbit = (ulong)1 << (order - 1); generate_crc_table(); ulong bit, crc; int i; if (direct == 0) { crcinit_nondirect = crcinit; crc = crcinit; for (i = 0; i < order; i++) { bit = crc & crchighbit; crc <<= 1; if (bit != 0) { crc ^= polynom; } } crc &= crcmask; crcinit_direct = crc; } else { crcinit_direct = crcinit; crc = crcinit; for (i = 0; i < order; i++) { bit = crc & 1; if (bit != 0) { crc ^= polynom; } crc >>= 1; if (bit != 0) { crc |= crchighbit; } } crcinit_nondirect = crc; } }