private void FromBytesToFormatoPainelCfg(byte[] dados) { unsafe { fixed(byte *pSrc = dados) { FormatoRegiao *regiao = (FormatoRegiao *)pSrc; this.versao = regiao->versao; this.formatoDataHora = regiao->formatoDataHora; this.unidadeVelocidade = regiao->unidadeVelocidade; this.unidadeTemperatura = regiao->unidadeTemperatura; this.opcaoAmPm_Ponto = regiao->opcaoAmPm_Ponto; this.moeda = regiao->moeda; this.separadorDecimal = regiao->separadorDecimal; for (int i = 0; i < 16; i++) { this.nome[i] = regiao->nome[i]; } for (int i = 0; i < 40; i++) { this.reservado[i] = regiao->reservado[i]; } this.crc = regiao->crc; for (int i = 0; i < 64; i++) { this.idiomaPath[i] = regiao->idiomaPath[i]; } } } }
/* * * public void Salvar(string arquivoNome, ControladorPontos.Controlador Ctrldr) * { * * for(int painel = 0; painel < Ctrldr.QuantidadePaineis; painel++) * { * Salvar(arquivoNome); * } * * } */ public unsafe void AtualizarCRC() { Byte[] dados = toByteArray(); fixed(byte *pSrc = dados) { FormatoRegiao *regiao = (FormatoRegiao *)pSrc; this.crc = CalcularCRC(dados); } }
public bool VerificarCRC(byte[] dados) { unsafe { fixed(byte *pSrc = dados) { FormatoRegiao *parametros = (FormatoRegiao *)pSrc; return(parametros->crc == CalcularCRC(dados)); } } }
private unsafe UInt16 CalcularCRC(Byte[] dados) { int tamanho; Byte[] dadosCRC = new byte[sizeof(FormatoRegiao) - sizeof(UInt16)]; fixed(byte *pSrc = dados) { FormatoRegiao *regiao = (FormatoRegiao *)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(FormatoRegiao) - ((int)®iao->crc - (int)pSrc + sizeof(UInt16))); return(CRC16CCITT.Calcular(dadosCRC)); } }
private byte[] toByteArray() { unsafe { Byte[] resultado = new Byte[sizeof(FormatoRegiao)]; fixed(byte *pSrc = resultado) { FormatoRegiao *regiao = (FormatoRegiao *)pSrc; regiao->versao = this.versao; regiao->formatoDataHora = this.formatoDataHora; regiao->unidadeVelocidade = this.unidadeVelocidade; regiao->unidadeTemperatura = this.unidadeTemperatura; regiao->moeda = this.moeda; regiao->separadorDecimal = this.separadorDecimal; regiao->opcaoAmPm_Ponto = this.opcaoAmPm_Ponto; for (int i = 0; i < 16; i++) { regiao->nome[i] = this.nome[i]; } for (int i = 0; i < 40; i++) { regiao->reservado[i] = this.reservado[i]; } regiao->crc = this.crc; for (int i = 0; i < 64; i++) { regiao->idiomaPath[i] = this.idiomaPath[i]; } return(resultado); } } }