Hexadecimal to String - Formatando String

5 respostas
Rivas

Bom dia Pessoal,

Estou com um problema em formatar uma String, onde a mesma vem de um cálculo que converto para Hexadecimal. Necessito que se o resultado venha apenas com uma casa, coloque ‘0’ na frente. Veja o código:

// Metodo para Calculo CS
public static String calculo (String cs) {
		
	int chk = 0;
	
   	 for(int i = 0 ; i < cs.length() ; i++){
   		 if (cs.charAt(i) == '*')
   			 break;
   		 else {
   			 char carac = cs.charAt(i);
   			 chk = chk ^ carac;
   		 	}
   	 	}

   	 // Converte de Hexa para String e coloca em Maúsculas as letras Hexas
   	 return Integer.toHexString(chk).toUpperCase();
   	 
} // fim metodo Calculo CS

Já testei com o metodo abaixo, porém me retorna um erro:

String.format("%02d", Integer.toString(chk, 16))

Erro:

[color=red]

Exception in thread “main” java.util.IllegalFormatConversionException: d != java.lang.String

at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source)

at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source)

at java.util.Formatter$FormatSpecifier.print(Unknown Source)

at java.util.Formatter.format(Unknown Source)

at java.util.Formatter.format(Unknown Source)

at java.lang.String.format(Unknown Source)

at Checksum.calculo(Checksum.java:28)

at CheksumTest.main(CheksumTest.java:13)

[/color]

Agradeço desde já a ajuda!

5 Respostas

ViniGodoy

O erro que está dando é que o formatador %d não deve ser usado com Strings.

Ali, no lugar de Integer.toString, você não queria usar Integer.parseInt?

Outra coisa, se você está fazendo calculos e lidando com números, por que não utiliza variáveis numéricas?

ViniGodoy
Sempre represente números por tipos numéricos:
// Metodo para Calculo CS  
 public static int calculo (String cs) {  
           
     int chk = 0;  
       
      for(int i = 0 ; i < cs.length() ; i++){  
          if (cs.charAt(i) == '*')  
              break;  
          else {  
              char carac = cs.charAt(i);  
              chk = chk ^ carac;  
             }  
         }  
   
      return chk;
}
Deixe a conversão para String somente para a hora de exibir o resultado.
String.format("%02x", chk);

Isso evite perda de precisão, conversões desnecessárias e consumo exagerado de memória. ;)

Rivas

Obrigado Vini, mas ainda continuo com o erro.

Já tentei passar int e na hora de apresentar converter para hexa e formatar. Converter antes e formatar na hora de apresentar, mas ainda nada!

Veja se consegue simular, por favor.

Rivas

Obrigado, consegui!

Essa variável eu tenho que utilizar em String para formatar um dado com um determinado protocolo e transmitir por UDP.

Abraços.

ViniGodoy

O código que eu passei não funcionou?
Pq testando aqui ele funciona perfeitamente.

Criado 11 de dezembro de 2010
Ultima resposta 11 de dez. de 2010
Respostas 5
Participantes 2