public unsafe void AtualizarCRC() { Byte[] dados = toByteArray(); fixed(byte *pSrc = dados) { FormatoMotoristas *regiao = (FormatoMotoristas *)pSrc; this.crc = CalcularCRC(dados); } }
public bool VerificarCRC(Byte[] dados) { unsafe { fixed(byte *pSrc = dados) { FormatoMotoristas *motoristas = (FormatoMotoristas *)pSrc; return(motoristas->crc == CalcularCRC(dados)); } } }
private unsafe UInt16 CalcularCRC(Byte[] dados) { int tamanho; Byte[] dadosCRC = new byte[sizeof(FormatoMotoristas) - sizeof(UInt16)]; fixed(byte *pSrc = dados) { FormatoMotoristas *motorista = (FormatoMotoristas *)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, sizeof(FormatoMotoristas) - ((int)&motorista->crc - (int)pSrc + sizeof(UInt16))); return(CRC16CCITT.Calcular(dadosCRC)); } }
private void FromBytesToFormatoPainelCfg(byte[] dados) { unsafe { fixed(byte *pSrc = dados) { FormatoMotoristas *roteiros = (FormatoMotoristas *)pSrc; this.versao = roteiros->versao; this.id = roteiros->id; this.labelIdentificacao = ArrayLDX2.ByteArrayToString(roteiros->labelIdentificacao, 20); this.labelNome = ArrayLDX2.ByteArrayToString(roteiros->labelNome, 20); this.crc = roteiros->crc; } } }
private byte[] toByteArray() { unsafe { Byte[] resultado = new Byte[sizeof(FormatoMotoristas)]; fixed(byte *pSrc = resultado) { FormatoMotoristas *roteiros = (FormatoMotoristas *)pSrc; roteiros->versao = this.versao; roteiros->id = this.id; ArrayLDX2.StringToByteArray(roteiros->labelIdentificacao, this.labelIdentificacao, 20); ArrayLDX2.StringToByteArray(roteiros->labelNome, this.labelNome, 20); roteiros->crc = this.crc; return(resultado); } } }