private byte[] toByteArray()
        {
            unsafe
            {
                Byte[] resultado = new Byte[sizeof(FormatoMensagem)];

                fixed(byte *pSrc = resultado)
                {
                    FormatoMensagem *mensagem = (FormatoMensagem *)pSrc;


                    mensagem->versao    = this.versao;
                    mensagem->reservado = this.reservado;
                    mensagem->id        = this.id;
                    ArrayLDX2.StringToByteArray(mensagem->labelMensagem, this.labelMensagem, 20);

                    for (int i = 0; i < 38; i++)
                    {
                        mensagem->reservado2[i] = this.reservado2[i];
                    }

                    mensagem->crc = this.crc;

                    return(resultado);
                }
            }
        }
        public unsafe void AtualizarCRC()
        {
            Byte[] dados = toByteArray();

            fixed(byte *pSrc = dados)
            {
                FormatoMensagem *regiao = (FormatoMensagem *)pSrc;

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

                    return(parametros->crc == CalcularCRC(dados));
                }
            }
        }
        private unsafe UInt16 CalcularCRC(Byte[] dados)
        {
            int tamanho;

            Byte[] dadosCRC = new byte[sizeof(FormatoMensagem) - sizeof(UInt16)];

            fixed(byte *pSrc = dados)
            {
                FormatoMensagem *regiao = (FormatoMensagem *)pSrc;

                Array.Copy(dados, 0, dadosCRC, 0, (int)&regiao->crc - (int)pSrc);
                Array.Copy(dados, ((int)&regiao->crc - (int)pSrc + sizeof(UInt16)), dadosCRC,
                           (int)&regiao->crc - (int)pSrc,
                           sizeof(FormatoMensagem) - ((int)&regiao->crc - (int)pSrc + sizeof(UInt16)));

                return(CRC16CCITT.Calcular(dadosCRC));
            }
        }
        private void FromBytesToFormatoPainelCfg(byte[] dados)
        {
            unsafe
            {
                fixed(byte *pSrc = dados)
                {
                    FormatoMensagem *mensagem = (FormatoMensagem *)pSrc;

                    this.versao        = mensagem->versao;
                    this.reservado     = mensagem->reservado;
                    this.id            = mensagem->id;
                    this.labelMensagem = ArrayLDX2.ByteArrayToString(mensagem->labelMensagem, 20);

                    for (int i = 0; i < 38; i++)
                    {
                        this.reservado2[i] = mensagem->reservado2[i];
                    }

                    this.crc = mensagem->crc;
                }
            }
        }