コード例 #1
0
        /********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"));
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: CRC.cs プロジェクト: darkstar/gus
        // 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();
            }
        }