private byte[] toByteArray() { unsafe { Byte[] resultado = new Byte[sizeof(FormatoRoteiros)]; fixed(byte *pSrc = resultado) { FormatoRoteiros *roteiros = (FormatoRoteiros *)pSrc; roteiros->versao = this.versao; roteiros->reservado = this.reservado; roteiros->id = this.id; roteiros->tarifa = this.tarifa; // valor da tarifa multiplicado por 100 ex:11,22 é salvo como 1122 ArrayLDX2.StringToByteArray(roteiros->labelNumero, this.labelNumero, 20); ArrayLDX2.StringToByteArray(roteiros->labelRoteiro, this.labelRoteiro, 16); ArrayLDX2.StringToByteArray(roteiros->labelRoteiroVolta, this.labelRoteiroVolta, 16); for (int i = 0; i < 2; i++) { roteiros->reservado2[i] = this.reservado2[i]; } roteiros->crc = this.crc; return(resultado); } } }
private void FromBytesToFormatoPainelCfg(byte[] dados) { unsafe { fixed(byte *pSrc = dados) { FormatoRoteiros *roteiros = (FormatoRoteiros *)pSrc; this.versao = roteiros->versao; this.reservado = roteiros->reservado; this.id = roteiros->id; this.tarifa = roteiros->tarifa; // valor da tarifa multiplicado por 100 ex:11,22 é salvo como 1122 this.labelNumero = ArrayLDX2.ByteArrayToString(roteiros->labelNumero, 20); this.labelRoteiro = ArrayLDX2.ByteArrayToString(roteiros->labelRoteiro, 16); this.labelRoteiroVolta = ArrayLDX2.ByteArrayToString(roteiros->labelRoteiroVolta, 16); for (int i = 0; i < 2; i++) { this.reservado2[i] = roteiros->reservado2[i]; } this.crc = roteiros->crc; } } }
/* * public void Salvar(string diretorio, ControladorPontos.Controlador Ctrdl) * { * //for(int painel = 0; painel < Ctrdl.QuantidadePaineis; painel++) * int painel = 0; * { * for(int roteiro = 0; roteiro < Ctrdl.Paineis[painel].Roteiros.Count; roteiro++) * { * labelNumero = Ctrdl.Paineis[painel].Roteiros[roteiro].LabelNumero; * labelRoteiro = Ctrdl.Paineis[painel].Roteiros[roteiro].LabelRoteiroIda; * tarifa = (uint)Ctrdl.Paineis[painel].Roteiros[roteiro].Tarifa; * * Salvar(diretorio + @"\" + roteiro.ToString("d3") + ".rot"); * } * } * } */ public unsafe void AtualizarCRC() { Byte[] dados = toByteArray(); fixed(byte *pSrc = dados) { FormatoRoteiros *regiao = (FormatoRoteiros *)pSrc; this.crc = CalcularCRC(dados); } }
public bool VerificarCRC(Byte[] dados) { unsafe { fixed(byte *pSrc = dados) { FormatoRoteiros *parametros = (FormatoRoteiros *)pSrc; return(parametros->crc == CalcularCRC(dados)); } } }
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)); } }