Conversão hexadecimal para decimal

11 respostas
D

Estou tendo um problema na hora de converter uma string hexadecimal para decimal, ocorre o seguinte quando tento converter o valor hexadecimal 49 para decimal, a função me retorna o valor correto 73 , mas quando tento converter minha string 49505152 a função me retorna [telefone removido] , gostaria de ver se alguém poderia me ajudar na solução deste problema, pois o valor que a função deveria me retornar seria 73808182. Agradeço se alguém tiver uma idéia. Estou utilizando a seguinte função:

String digitar = ("49505152");
System.out.println("digitar:" + digitar);
int digitar1 = Integer.parseInt(digitar,16);
System.out.println("digitar1:" + digitar1);

11 Respostas

E

um exemplinho rapido no caprixo :wink:

public class teste {
           
     public teste() {
        String in = "424f312020202039392c3939";
        String out = "";
        
        double decimal = 0;
        
        // expoente da base
        int exp = 0;
                
        System.err.print( Integer.parseInt( "F", 16 ) );
        
        StringBuffer hexa_buf = new StringBuffer(in); 
        for (int i = 0 ; i < in.length(); i++) {
            String tmp = "" + hexa_buf.charAt(i);
            decimal += Integer.parseInt( tmp, 16 ) * Math.pow( 16, i );
        }
        
        System.err.print( "\n\n" );
        System.err.print( decimal );
    }
    
    public static void main(String[] args) {
       new teste();        
    }
    
}

testado e funcionando :wink:

[]'s
Erko Bridee

R

[color=“darkblue”]Olá!
Cara, oq acontece é o seguinte, os inteiros tem um limite baixo…
ao invés de converter para inteiro converta para Long[/color]

String digitar = ("49505152"); System.out.println("digitar:" + digitar); long digitar1 = (long) digitar; System.out.println("digitar1:" + digitar1);

[color=“darkblue”]Alguém por favor me corrigar se eu fiz o cash errado, me deu uma dúvida agora :P…

[]'s[/color]

D

Valew pela dica AnjoSupremo, mas acontece que ao testar o seu programa, pensei que o mesmo me retornaria a string “667931323232325757445757”, sendo que me foi retornado o valor
“4.567292740058316E28”. Desculpe minha ignorância, mas não entendi este resultado. Agradeço se puder me explicar.

D

Valeu riqueneil pela sua ajuda, mas cara tentei utilizar o seu código no programa e acontece o seguinte, se eu não utilizar o “,16” na função como no exemplo que te enviei "int digitar1 = Integer.parseInt(digitar,16); ", tanto faz se utilizar int ou long, vai funcionar, mas não consigo transformar para decimal. Agradeço se tiveres outra dica. Para testar sua função utilizei o seguinte código, e funcionou da mesma maneira que quando utilizei o int:

String digitar = ("49505152");
            String digitarHexToString = new String("");
            for(int i = 0; i < digitar.length(); i += 2){
			    String digitarTemp = digitar.substring(i, i + 2);             
			    digitarHexToString += new Character((char)(Integer.valueOf(digitarTemp,16).intValue())).toString();
			    frame_=digitarHexToString;
			}
			System.out.println("digitar:" + digitarHexToString);
			long digitar1 = Long.parseLong (digitarHexToString);
            System.out.println("digitar1:" + digitar1);
E

“DouglasCar”:
Valeu riqueneil pela sua ajuda, mas cara tentei utilizar o seu código no programa e acontece o seguinte, se eu não utilizar o “,16” na função como no exemplo que te enviei "int digitar1 = Integer.parseInt(digitar,16); ", tanto faz se utilizar int ou long, vai funcionar, mas não consigo transformar para decimal. Agradeço se tiveres outra dica. Para testar sua função utilizei o seguinte código, e funcionou da mesma maneira que quando utilizei o int:

String digitar = ("49505152"); String digitarHexToString = new String(""); for(int i = 0; i < digitar.length(); i += 2){ String digitarTemp = digitar.substring(i, i + 2); digitarHexToString += new Character((char)(Integer.valueOf(digitarTemp,16).intValue())).toString(); frame_=digitarHexToString; } System.out.println("digitar:" + digitarHexToString); long digitar1 = Long.parseLong (digitarHexToString); System.out.println("digitar1:" + digitar1);

naum entendi oq tu quiz dizer :roll:

R

[color=“darkblue”]Opa!
Sabe oq q é… vc sabe q os inteiros tem um limite, eles só vão à valores por vota de 32000 com sinal e sem vão à uns 65000, entendeu?
Ele estava passando esses valores e então dei a dica para que ele usasse long ao invés de inteiros…
São valores que conseguem atingir um limite maior…

[]'s[/color]

D

Pessoal, como pude perceber ao tentar converter a string “49505152” o valor retornado foi “[telefone removido]”, ou seja converteu a string como um todo, gostaria de ver com vocês se alguém sabe como eu poderia fazer para converter a string pegando somente os valores em pares, tipo uma função que me retornasse como resultado da conversão a string “73808182”, ou seja me retornasse os valores em decimal de “49”, “50”, “51” e “52” na mesma string. Agradeço se alguém tiver uma sugestão.

D

Desculpem eu repeti a mensagem anterior.

R

[color=“darkblue”]Cara, eu reparei que no meio do código vc ainda usa inteiro para os caracteres!!
Pelo menos foi isso q eu entendi!!
Agora acredito que tenha um modo mais fácil de fazer isso…
Vou tentar bolar algo aki se tiver tempo… ok??

[]'s[/color]

D

Valeu pessoal pela ajuda, graças ao riqueneil e ao AnjoSupremo consegui converter a minha string de hexa para decimal. Ocorre que preciso fazer um cálculo para o cks que é o checksum do painel e para isso eu preciso converter os valores para inteiro e somar cada um deles. Segue abaixo o código que estou utilizando, com dois comentários, onde coloco o problema que preciso resolver no programa:

import java.math.BigInteger;

import Painel_JDJ.*;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class Stest5 extends SerialCom {
       public Stest5(){
              super();
       }
       public static void main(String[] args){
           String frame_="";
           String digitar;
           
           String inicio = ("1B");
           String inicioHexToString = new String("");
           
           for(int i = 0; i < inicio.length(); i += 2){
			    String inicioTemp = inicio.substring(i, i + 2);             
			    inicioHexToString += (Integer.parseInt(inicioTemp,16));
			    frame_=inicioHexToString;
			}
           System.out.println(inicioHexToString);
           
           String continuacao = ("2221212120FE");
           String continuacaoHexToString = new String("");
           
           for(int i = 0; i < continuacao.length(); i += 2){
			    String continuacaoTemp = continuacao.substring(i, i + 2);             
			    continuacaoHexToString += (Integer.parseInt(continuacaoTemp,16));
			    frame_=continuacaoHexToString;
			}
			System.out.println("continuacao:" + continuacaoHexToString);
						System.out.println("continuacao1:" + continuacao);
			
			digitar = JOptionPane.showInputDialog( "Digite a String" );           
	        System.out.println("meio:" + digitar);
	        
	        StringBuffer digitar1 = new StringBuffer(); 
           for (int i = 0; i < digitar.length(); i++) { 
               char ch = digitar.charAt(i); 
               if (ch < 0x10) 
                   digitar1.append('0');  // addiciona zero para numeros com só uma casa 
               digitar1.append(Integer.toHexString(ch & 0xFF)); 
           } 
           String digitar_string = digitar1.toString(); // aqui só o codigo hexadecimal
            String digitar_stringHexToString = new String("");
            
            for(int i = 0; i < digitar_string.length(); i += 2){
 			    String digitar_stringTemp = digitar_string.substring(i, i + 2);             
 			    digitar_stringHexToString += (Integer.parseInt(digitar_stringTemp,16));
 			    frame_=digitar_stringHexToString;
 			}
			System.out.println("digitar:" + digitar_stringHexToString);
						
			String fim = ("04");
            String fimHexToString = new String("");
            
            for(int i = 0; i < fim.length(); i += 2){
 			    String fimTemp = fim.substring(i, i + 2);             
 			    fimHexToString += (Integer.parseInt(fimTemp,16));
 			    frame_=fimHexToString;
 			}
			System.out.println("fim:" + fimHexToString);

			/*Aqui deveria ser somado cada elemento das strings "continuacao HexToString" com cada elemento da "digitar_stringHexToString", sendo que para fazer a soma eu teria de transformar cada par de números da string em um valor inteiro resultando em um "v_check_sum" com valor inteiro também */
			BigInteger v_check_sum = new BigInteger(continuacaoHexToString + digitar_stringHexToString);
			System.out.println(v_check_sum);
			
/*Aqui sera usado depois de calculado o"v_check_sum" para então calcular o cks
			unsigned char cks=0;
			unsigned int v_check_sum=0;
			cks=(((~v_check_sum)+1)|0x80)&0x00ff;  */

Stest5 st = new Stest5();           
                if ( st.PortaExiste("COM1") == true) {
                   System.out.println("Iniciando comunicação!");
                   SComm sc = new SComm("COM1",19200,1);
                   sc.HabilitarEscrita();
                   sc.ObterIdDaPorta();
                   sc.AbrirPorta();
                   //sc.EnviarUmaString(concatenaHexToString);                   
                  // System.out.println(concatenaHexToString);
                   sc.FecharCom();
                   Stest5 st2 = new Stest5();

                   if ( st2.PortaExiste("COM1") == true) {
                       System.out.println("Iniciando comunicação!");
                       SComm sc2 = new SComm("COM1",19200,1);
                       sc2.HabilitarLeitura();
                       sc2.ObterIdDaPorta();
                       sc2.AbrirPorta();
                       sc2.LerDados();
                       sc2.FecharCom();
                    }
                }  else {
                   System.out.println("Nenhuma porta");
                }
       }    
}

Abaixo esta a explicação que tenho sobre o protocolo de comunicação com o painel digital que possuo.

Agradeço se alguém puder me dar uma força.

E

susa mano :cool:

q bom q tah tudo certin agora

qq coisa estamos ai :wink:

[]'s
Erko Bridee

Criado 13 de setembro de 2004
Ultima resposta 13 de set. de 2004
Respostas 11
Participantes 3