コード例 #1
0
        public bool VerificarCRC(byte[] dados)
        {
            //const int posCRC1 = 62;
            //const int posCRC2 = 63;

            //Byte[] dados2 = this.ToBytes();
            //FormatoAlternancia fa = ArquivoALTAssembly(dados);

            //List<byte> dadosValidos = new List<byte>();
            //for (int i = 0; i < dados.Length; i++)
            //{
            //    if ((i == posCRC1) || (i == posCRC2))
            //    {
            //        continue;
            //    }
            //    else
            //    {
            //        dadosValidos.Add(dados[i]);
            //    }
            //}
            //ushort crc16 = (ushort)(dados[posCRC1] << 8);
            //crc16 += (ushort)(dados[posCRC2]);
            //ushort crc16_2 = CRC16CCITT.Calcular(dadosValidos.ToArray());
            //ushort crc16_3 = CRC16CCITT.Calcular(dados);
            //return (CRC16CCITT.Calcular(dadosValidos.ToArray()) == crc16);
            unsafe
            {
                fixed(byte *pSrc = dados)
                {
                    FormatoAlternancia *alternancia = (FormatoAlternancia *)pSrc;

                    return(alternancia->crc == CalcularCRC(dados));
                }
            }
        }
コード例 #2
0
        private unsafe UInt16 CalcularCRC(Byte[] dados)
        {
            Byte[] dadosCRC = new byte[dados.Length - sizeof(UInt16)];

            fixed(byte *pSrc = dados)
            {
                FormatoAlternancia *alternancia = (FormatoAlternancia *)pSrc;

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

                return(CRC16CCITT.Calcular(dadosCRC));
            }
        }
コード例 #3
0
        private byte[] toByteArray()
        {
            unsafe
            {
                Byte[] resultado = new Byte[sizeof(FormatoAlternancia)];

                fixed(byte *pSrc = resultado)
                {
                    FormatoAlternancia *fAlternancia = (FormatoAlternancia *)pSrc;

                    fAlternancia->versao          = this.versao;
                    fAlternancia->QtdAlternancias = this.QuantidadeAlternancias;

                    for (int i = 0; i < 60; i++)
                    {
                        fAlternancia->reservado[i] = this.reservado[i];
                    }

                    fAlternancia->crc = this.crc;

                    return(resultado);
                }
            }
        }