Ola pessoal estou com um problema para converter hexadecimal para integer
da number format exception quando temto fazer a seguinte operação:
// DEC -> HEX
System.out.println("Convertendo de DEC -> HEX");
//aqui pego o decimal negativo
int dec1 = -95;
System.out.println("dec1: " + dec1);
// converto para hexa
String hex1 = Integer.toHexString(dec1);
hex1 = hex1.toUpperCase();
System.out.println("hex1: " + hex1);
// HEX -> DEC
System.out.println();
System.out.println("Convertendo de HEX -> DEC");
//aqui vai o hexa gerado acima
String hex2 = "FFFFFFA1";
System.out.println("hex2: " + hex2);
//da erro na hora que eu tento converter para inteiro novamente
int dec2 = Integer.parseInt(hex2, 16);
System.out.println("dec2: " + dec2);
Quando você converter um inteiro negativo para hexa a função retorna o valor sem sinal ou seja em complemento dois, ou seja se você tentar converter -1 por exemplo ele vai te retornar FFFFFFFF só que que isso equivale a 4294967295 o que gera uma exeção na conversão pois os inteiros em java vão de -2147483648 até 2147483647.
Na documentação do java:
[quote]toHexString
public static String toHexString(int i)
Returns a string representation of the integer argument as an [b]unsigned[/b] integer in base 16. [/quote]
int decimal;
String hexadecimal;
...
if (decimal < 0) //Converte para positivo e coloca o sinal pois a função toHexString gera somente valores em complemento de 2 (Hexa positivo)
hexadecimal = "-" + Integer.toHexString(Math.abs(decimal));
else
hexadecimal = Integer.toHexString(decimal);
Observação.
Não utilize dec1 hex1, como nome de variáveis. Sempre utilize um nome que diga o que a variável significa para o programa assim, fica mais fácil para interpretar o código fonte.
int decimal;
String hexadecimal;
...
if (decimal < 0) //Converte para positivo e coloca o sinal pois a função toHexString gera somente valores em complemento de 2 (Hexa positivo)
hexadecimal = "-" + Integer.toHexString(Math.abs(decimal));
else
hexadecimal = Integer.toHexString(decimal);
Observação.
Não utilize dec1 hex1, como nome de variáveis. Sempre utilize um nome que diga o que a variável significa para o programa assim, fica mais fácil para interpretar o código fonte.[/quote]
Valeu x@and ajudou muito obrigado pelas dicar.
consegui resolver