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); }
// 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)); }
/// <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); }