public Byte[] toByteArray()
        {
            unsafe
            {
                Byte[] resultado = new Byte[sizeof(FormatoParametrosVariaveis)];

                fixed(byte *pSrc = resultado)
                {
                    FormatoParametrosVariaveis *parametros = (FormatoParametrosVariaveis *)pSrc;

                    parametros->versao       = (Byte)this.versao;
                    parametros->horaSaida    = (Byte)this.horaSaida;
                    parametros->minutosSaida = (Byte)this.minutosSaida;
                    parametros->regiao       = (Byte)this.regiao;
                    parametros->sentidoIda   = (bool)this.sentidoIda;
                    parametros->roteiro      = (UInt32)this.roteiro;
                    parametros->motorista    = this.motorista;
                    //parametros->baudRate = this.baudRate;
                    parametros->TurnOffUSB = this.TurnOffUSB;
                    parametros->crc        = this.crc;
                }

                return(resultado);
            }
        }
        /*
         * public void Salvar(string arquivoNome, ControladorPontos.Controlador Ctrdlr)
         * {
         *  versao = 1;
         *  horaSaida = Ctrdlr.ParametrosVariaveis.HoraSaida;
         *  minutosSaida = Ctrdlr.ParametrosVariaveis.MinutosSaida;
         *  regiao = Ctrdlr.ParametrosVariaveis.RegiaoSelecionada;
         *  sentidoIda = Ctrdlr.ParametrosVariaveis.SentidoIda;
         *  crc = 0;
         *  roteiro = Ctrdlr.ParametrosVariaveis.RoteiroSelecionado;
         *
         *  Salvar(arquivoNome);
         * }
         */
        public unsafe void AtualizarCRC()
        {
            Byte[] dados = toByteArray();

            fixed(byte *pSrc = dados)
            {
                FormatoParametrosVariaveis *parametros = (FormatoParametrosVariaveis *)pSrc;

                this.crc = CalcularCRC(dados);
            }
        }
        public bool VerificarCRC(byte[] dados)
        {
            unsafe
            {
                fixed(byte *pSrc = dados)
                {
                    FormatoParametrosVariaveis *parametros = (FormatoParametrosVariaveis *)pSrc;

                    return(parametros->crc == CalcularCRC(dados));
                }
            }
        }
        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)&parametros->crc - (int)pSrc);
                Array.Copy(dados, ((int)&parametros->crc - (int)pSrc + sizeof(UInt16)), dadosCRC,
                           (int)&parametros->crc - (int)pSrc,
                           sizeof(FormatoParametrosVariaveis) - ((int)&parametros->crc - (int)pSrc + sizeof(UInt16)));

                return(CRC16CCITT.Calcular(dadosCRC));
            }
        }