Probelmas em converter hexadecimal negativo para integer [RESOLVIDO]

:slight_smile: 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]

x@ndy valeu pela esplicação eu não imaginava que isso estava acontecendo.

agora vou fazer outra pergunta como eu posso fazer essa conversão da forma correta se vc puder
me ajudar nessa agradeço

Na verdade é bem simples:

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=x@ndy]Na verdade é bem simples:

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

Estamos ai para isso :smiley:

blz com as orientações acima resolvi meu problema