/********EXTERNAL OBJECT PUBLIC METHODS - END ********/ private string CalculateCRC(byte[] input, ChecksumAlgorithm checksumAlgorithm) { CRCParameters parms = ChecksumAlgorithmUtils.getParameters(checksumAlgorithm, this.error); if (this.HasError()) { return(""); } long aux = CalculateCRC(input, parms); if (aux == 0 || this.HasError()) { return(""); } switch (parms.Width) { case 8: return(aux.ToString("X2")); case 16: return(aux.ToString("X4")); case 32: return(aux.ToString("X8")); default: return(aux.ToString("X")); } }
private long CalculateCRC(byte[] input, CRCParameters parms) { long curValue = parms.Init; long topBit = 1L << (parms.Width - 1); long mask = (topBit << 1) - 1; for (int i = 0; i < input.Length; i++) { long curByte = ((long)(input[i])) & 0x00FFL; if (parms.ReflectIn) { curByte = Reflect(curByte, 8); } for (int j = 0x80; j != 0; j >>= 1) { long bit = curValue & topBit; curValue <<= 1; if ((curByte & j) != 0) { bit ^= topBit; } if (bit != 0) { curValue ^= parms.Polynomial; } } } if (parms.ReflectOut) { curValue = Reflect(curValue, parms.Width); } curValue = curValue ^ parms.FinalXor; return(curValue & mask); }
// Construct a new CRC algorithm object public CRC(CRCParameters param) { m_Params = param; // initialize some bitmasks m_CRCMask = ((((ulong)1 << (m_Params.Width - 1)) - 1) << 1) | 1; m_CRCHighBitMask = (ulong)1 << (m_Params.Width - 1); if (m_Params.Width > 7) { GenerateTable(); } }