protected override bool VerificarIntegridade(string arquivoNome) { const int posCRC1 = 2; const int posCRC2 = 3; this.ArquivoNome = arquivoNome; Byte[] dados = this.ToBytes(); List <byte> dadosValidos = new List <byte>(); for (int i = 0; i < dados.Length; i++) { if ((i == posCRC1) || (i == posCRC2)) { continue; } else { dadosValidos.Add(dados[i]); } } ushort crc16 = (ushort)(dados[posCRC1] << 8); crc16 += (ushort)(dados[posCRC2]); return(CRC16CCITT.Calcular(dadosValidos.ToArray()) == crc16); }
private unsafe UInt16 CalcularCRC(Byte[] dados) { Byte[] dadosCRC = new byte[dados.Length - sizeof(UInt16)]; fixed(byte *pSrc = dados) { FormatoIdioma *parametros = (FormatoIdioma *)pSrc; Array.Copy(dados, 0, dadosCRC, 0, (int)¶metros->crc - (int)pSrc); Array.Copy(dados, ((int)¶metros->crc - (int)pSrc + sizeof(UInt16)), dadosCRC, (int)¶metros->crc - (int)pSrc, dados.Length - ((int)¶metros->crc - (int)pSrc + sizeof(UInt16))); return(CRC16CCITT.Calcular(dadosCRC)); } }
private unsafe UInt16 CalcularCRC(Byte[] dados) { Byte[] dadosCRC = new byte[sizeof(FormatoParametrosVariaveis) - sizeof(UInt16)]; fixed(byte *pSrc = dados) { FormatoParametrosVariaveis *parametros = (FormatoParametrosVariaveis *)pSrc; Array.Copy(dados, 0, dadosCRC, 0, (int)¶metros->crc - (int)pSrc); Array.Copy(dados, ((int)¶metros->crc - (int)pSrc + sizeof(UInt16)), dadosCRC, (int)¶metros->crc - (int)pSrc, sizeof(FormatoParametrosVariaveis) - ((int)¶metros->crc - (int)pSrc + sizeof(UInt16))); return(CRC16CCITT.Calcular(dadosCRC)); } }
private unsafe UInt16 CalcularCRC(Byte[] dados) { Byte[] dadosCRC = new byte[dados.Length - sizeof(UInt16)]; fixed(byte *pSrc = dados) { FormatoMotoristaPaths *motorista = (FormatoMotoristaPaths *)pSrc; Array.Copy(dados, 0, dadosCRC, 0, (int)&motorista->crc - (int)pSrc); Array.Copy(dados, ((int)&motorista->crc - (int)pSrc + sizeof(UInt16)), dadosCRC, (int)&motorista->crc - (int)pSrc, dados.Length - ((int)&motorista->crc - (int)pSrc + sizeof(UInt16))); return(CRC16CCITT.Calcular(dadosCRC)); } }
private unsafe UInt16 CalcularCRC(Byte[] dados) { int tamanho; Byte[] dadosCRC = new byte[sizeof(FormatoRoteiros) - sizeof(UInt16)]; fixed(byte *pSrc = dados) { FormatoRoteiros *regiao = (FormatoRoteiros *)pSrc; Array.Copy(dados, 0, dadosCRC, 0, (int)®iao->crc - (int)pSrc); Array.Copy(dados, ((int)®iao->crc - (int)pSrc + sizeof(UInt16)), dadosCRC, (int)®iao->crc - (int)pSrc, sizeof(FormatoRoteiros) - ((int)®iao->crc - (int)pSrc + sizeof(UInt16))); return(CRC16CCITT.Calcular(dadosCRC)); } }
public virtual bool EnviarDados(byte[] arrayEntrada, byte[] parametrosProtocolo) { Byte[] arraySaida = new Byte[arrayEntrada.Length + 2]; Int32 tamanhoArrayEntrada = arrayEntrada.Length; Boolean resultado = true; Byte resposta; // PREPARAR ARRAY A SER ENVIADO for (int i = 0; i < arrayEntrada.Length; i++) { arraySaida[i] = arrayEntrada[i]; } // PASSO 1 - ENVIAR PROTOCOLO this.Enviar(parametrosProtocolo, 0, parametrosProtocolo.Length); // PASSO 2 - RECEBER CONFIRMAÇÃO resposta = (byte)this.ReceberByte(); if (resposta != ACK) { throw new FalhaComunicacaoException("NACK"); } // PASSO 3 - ENVIAR DADOS ushort crc16 = CRC16CCITT.Calcular(arrayEntrada); arraySaida[tamanhoArrayEntrada + 0] = (byte)(crc16 % 256); arraySaida[tamanhoArrayEntrada + 1] = (byte)(crc16 / 256); this.Enviar(arraySaida, 0, arraySaida.Length); // PASSO 4 - RECEBER CONFIRMAÇÃO resposta = (byte)this.ReceberByte(); if (resposta != ACK) { //throw new SenhaNaoConfereException("Senha não confere"); resultado = false; } return(resultado); }
private unsafe UInt16 CalcularCRC(Byte[] dados) { int tamanho; List <byte> dadosBitmaps = new List <byte>(); Byte[] dadosCRC = new byte[dados.Length - sizeof(UInt16)]; fixed(byte *pSrc = dados) { FormatoFonte *parametros = (FormatoFonte *)pSrc; Array.Copy(dados, 0, dadosCRC, 0, (int)¶metros->crc - (int)pSrc); Array.Copy(dados, ((int)¶metros->crc - (int)pSrc + sizeof(UInt16)), dadosCRC, (int)¶metros->crc - (int)pSrc, sizeof(FormatoFonte) - ((int)¶metros->crc - (int)pSrc + sizeof(UInt16))); for (int i = sizeof(FormatoFonte); i < dados.Length; i++) { dadosCRC[i - 2] = dados[i]; } //return CRC16CCITT.Calcular(dadosCRC); } //foreach (Bitmap bmp in this.bitmaps) //{ // dadosBitmaps.AddRange(bmp.FromMatrixToArray()); //} //tamanho = dadosCRC.Length; //Array.Resize(ref dadosCRC, dadosCRC.Length + dadosBitmaps.Count); //byte[] aux = dadosBitmaps.ToArray(); //Array.Copy(aux, 0, dadosCRC, tamanho, aux.Length); return(CRC16CCITT.Calcular(dadosCRC)); }
public void AtualizarCRC() { /* * Byte[] dados = toByteArray(); * * fixed (byte* pSrc = dados) * { * FormatoFonte* parametros = (FormatoFonte*)pSrc; * * this.crc = CalcularCRC(dados); * } */ const int posCRC1 = 62; const int posCRC2 = 63; Byte[] dados = FonteToByteArray(); List <byte> dadosValidos = new List <byte>(); for (int i = 0; i < dados.Length; i++) { if ((i == posCRC1) || (i == posCRC2)) { continue; } else { dadosValidos.Add(dados[i]); } } ushort crc16 = CRC16CCITT.Calcular(dadosValidos.ToArray()); dados[posCRC1] = (byte)(crc16 >> 8); dados[posCRC2] = (byte)(crc16); this.crc = crc16; }