none
Juntar dois dados hexadecimais e formar um RRS feed

  • Pergunta

  • Boa noite tenho uma aplicacao que recebo dados em hex e junto dois dados para formar um até ai tudo ok o problema ocorr quando os dados dado[1] é igual 0x01 e o segundo dado[2] e igual a 0x01 ,02,03 o problema é o zero na frete por exemplo quando o dado 01 09 teria que aparecer 265 em decimal mas aparece 25.segue parte codigo anexo.

    string x, y;
                                                   int a, b, resultado;
                                                   x = String.Format("{0:d3}", ((int)txtDecoder[4]));
                                                   y = String.Format("{0:d3}", ((int)txtDecoder[5]));
                                                   a = Convert.ToInt32(x);
                                                   b = Convert.ToInt32(y);
                                                   resultado = Convert.ToInt32(string.Format("{0}{1}", a, b));
                                                   string hexString = resultado.ToString();
                                                   int num = Int32.Parse(hexString, System.Globalization.NumberStyles.HexNumber);//Valor em decimal
                                                   textBox1.Text = num.ToString();

    segunda-feira, 9 de maio de 2016 23:28

Respostas

  • O problema é maior o codigo parece estar certo so que da erro segue o codigo.

    os dados que recebo sao em caracteres entao converto para hexa depois junto eles e converto para decimal e apresento em um textbox.

    duas linhas que nao podem sair do programa

                                                   x = String.Format("{0:x}", ((int)txtDecoder[4]));//Converte para hexaDecimal
                                                   y = String.Format("{0:x}", ((int)txtDecoder[5]));//Converte para hexaDecimal


     string x, y;
               int resultado;
               x = String.Format("{0:x}", ((int)txtDecoder[4]));//Converte para hexaDecimal
               y = String.Format("{0:x}", ((int)txtDecoder[5]));//Converte para hexaDecimal
              resultado = Convert.ToInt32(string.Format("{0}{1}", x, y));//Junta os valores EX:0x01 0x03 =0x0103
              string hexString = resultado.ToString();//Converte para string
              int num = Int32.Parse(hexString, System.Globalization.NumberStyles.HexNumber);//Valor em decimal
              textBox1.Text = num.ToString();

    • Marcado como Resposta Felipezip terça-feira, 10 de maio de 2016 23:51
    terça-feira, 10 de maio de 2016 23:43

Todas as Respostas

  • Olá Filipez, 

    Neste caso você tem que receber uma string para concatenar tipo você passa : 

    resultado = string.Format("{0}{1}", x, y);


    Já que é string x y.

    não precisa converter x e y, no seu caso você esta convertendo para inteiro. 

    Veja uma implementação que fiz.

     String a, b,hexConcat;
               
    
                Console.WriteLine("ztDigite o valor de 'a': ");
                a = Console.ReadLine();
                Console.WriteLine("ztDigite o valor de 'b': ");
                b = Console.ReadLine();
                hexConcat = string.Format("{0}{1}", a, b);
                int num = Int32.Parse(hexConcat, System.Globalization.NumberStyles.HexNumber);
                Console.WriteLine(num);


    At. te. Manoel Neto.




    terça-feira, 10 de maio de 2016 01:32
  • Você quer remover sempre o 0 da segunda variável?

    Se sim, só dá um replace "0", "" e concatenar.

    terça-feira, 10 de maio de 2016 01:50
  • Acho que vocês não tão entendendo direito o código a principio ta certo só que quando os dados primeiro dado é 01 e segundo tem um zero na frente tipo 09 teria que ficar assim 0x0109 convertendo para decimal 265 mas acontece isso so quando tem o zero no segundo valor ele junta 0x019 que é 25 em decimal,como resolver isso.
    terça-feira, 10 de maio de 2016 02:18
  • Agora sim Felipe eu entendi, o compilador está retirando o 0 do segundo dado, certo?

    O problema é que você está convertendo para inteiros, então ele retira o 0, é nulo, esqueceu?

    Trabalhe com strings, segue o exemplo:

    string x, y, resultado;
                x = String.Format("{0:d3}", textBox1.Text);
                y = String.Format("{0:d3}", textBox2.Text);
                resultado = string.Format("{0}{1}", x, y);
                int num = Int32.Parse(resultado, System.Globalization.NumberStyles.HexNumber);//Valor em decimal
                MessageBox.Show(num.ToString());





    • Editado Lailson Conceição terça-feira, 10 de maio de 2016 03:12
    • Marcado como Resposta Marcos SJ terça-feira, 10 de maio de 2016 13:18
    • Não Marcado como Resposta Felipezip terça-feira, 10 de maio de 2016 23:31
    terça-feira, 10 de maio de 2016 02:46
  • O problema é maior o codigo parece estar certo so que da erro segue o codigo.

    os dados que recebo sao em caracteres entao converto para hexa depois junto eles e converto para decimal e apresento em um textbox.

    duas linhas que nao podem sair do programa

                                                   x = String.Format("{0:x}", ((int)txtDecoder[4]));//Converte para hexaDecimal
                                                   y = String.Format("{0:x}", ((int)txtDecoder[5]));//Converte para hexaDecimal


     string x, y;
               int resultado;
               x = String.Format("{0:x}", ((int)txtDecoder[4]));//Converte para hexaDecimal
               y = String.Format("{0:x}", ((int)txtDecoder[5]));//Converte para hexaDecimal
              resultado = Convert.ToInt32(string.Format("{0}{1}", x, y));//Junta os valores EX:0x01 0x03 =0x0103
              string hexString = resultado.ToString();//Converte para string
              int num = Int32.Parse(hexString, System.Globalization.NumberStyles.HexNumber);//Valor em decimal
              textBox1.Text = num.ToString();

    • Marcado como Resposta Felipezip terça-feira, 10 de maio de 2016 23:51
    terça-feira, 10 de maio de 2016 23:43
  • isso resolveu todo o problema.var v = ((UInt16)txtDecoder[4] << 8 | txtDecoder[5]);
    terça-feira, 10 de maio de 2016 23:51
  • Olá Filipez, 

    A linha 7 esta convertendo para int esta linha aqui: resultado = string.Format("{0}{1}", x, y);

    Já que é string x y.

    não precisa converter x e y, no seu caso você esta convertendo para inteiro. 

    Veja uma implementação que fiz.

     String a, b,hexConcat;
               
    
                Console.WriteLine("ztDigite o valor de 'a': ");
                a = Console.ReadLine();
                Console.WriteLine("ztDigite o valor de 'b': ");
                b = Console.ReadLine();
                hexConcat = string.Format("{0}{1}", a, b);
                int num = Int32.Parse(hexConcat, System.Globalization.NumberStyles.HexNumber);
                Console.WriteLine(num);

    At. te. Manoel Neto.


    quarta-feira, 11 de maio de 2016 00:16