Пример #1
0
        public static Byte[] UpdateCRCValue(Byte[] dados, Byte[] dadosTemp, int CRCPosition1, int CRCPosition2)
        {
            ushort crc = CRC16CCITT.Calcular(dadosTemp);

            Byte[] dadosCRC = BitConverter.GetBytes(crc);

            dados[CRCPosition1] = dadosCRC[0];
            dados[CRCPosition2] = dadosCRC[1];

            return(dados);
        }
Пример #2
0
        // TODO: Verificar problemas nesse CRC
        public static ushort CalcularCRC(byte[] dados, int crcPosition)
        {
            Byte[] dadosCRC = new byte[dados.Length - sizeof(UInt16)];

            Array.Copy(dados, 0, dadosCRC, 0, crcPosition);

            if (crcPosition + sizeof(UInt16) < dados.Length)
            {
                Array.Copy(dados, crcPosition + sizeof(UInt16), dadosCRC, crcPosition, dados.Length - (crcPosition + sizeof(UInt16)));
            }

            return(CRC16CCITT.Calcular(dadosCRC));
        }
Пример #3
0
        /// <summary>
        /// Método para realizar a validação do CRC
        /// </summary>
        /// <param name="arrayBytes">Array de bytes contendo o(s) elemento(s) que se deseja calcular o CRC</param>
        /// <param name="posicaoInicial">Posicao inicial que se encontra o(s) elemento(s) para calculo do CRC</param>
        /// <param name="numeroElementos">Quantidade de elementos para entrar no calculo do CRC</param>
        /// <returns>Calculo do CRC</returns>
        public static ushort Calcular(byte[] buffer, int posicaoInicial, int numeroElementos)
        {
            CRC16CCITT instancia = new CRC16CCITT();
            ushort     crc       = 0xFFFF;

            ushort valor;

            for (int i = posicaoInicial; i < (posicaoInicial + numeroElementos); i++)
            {
                valor = buffer[i];
                crc   = instancia.ByteCRC(valor, crc);
            }

            return(crc);
        }