Estoy tratando de convertir una cadena que tiene 8 caracteres de código hexadecimal en un número entero para poder hacer una comparación int en lugar de comparaciones de cadenas sobre muchos valores diferentes.
Sé que esto es bastante trivial en C ++, pero necesito hacerlo en Java. El caso de prueba que necesito satisfacer es esencialmente Convertir "AA0F245C" a int y luego volver a esa cadena para saber que se está convirtiendo correctamente.
He probado lo siguiente:
int decode = Integer.decode("0xAA0F245C"); // NumberFormatException
int decode2 = Integer.decode("AA0F245C"); //NumberFormatException
int parseInt = Integer.parseInt("AA0F245C", 16); //NumberFormatException
int valueOf = Integer.valueOf("AA0F245C", 16); //NumberFormatException
También he intentado hacerlo dos caracteres a la vez y multiplicar los resultados, que funciona la conversión pero el número no es correcto.
int id = 0;
for (int h = 0; h < hex.length(); h= h+2)
{
String sub = hex.subSequence(h, h+2).toString();
if (id == 0)
id = Integer.valueOf(sub, 16);
else
id *= Integer.valueOf(sub, 16);
}
//ID = 8445600 which = 80DEA0 if I convert it back.
No puedo usar bibliotecas de terceros solo para que lo sepas, por lo que esto debe hacerse en las bibliotecas estándar de Java.
De forma anticipada, muchas gracias por su ayuda.
0xAA0F245C = 2853119068
peroInteger.MAX_VALUE = 0x7fffffff = 2147483647
Integer.parseUnsignedInt("value",radix)
método que sirve a su propósito. Si el valor es mayor Integer.MAX_VALUE
, se asigna a un número negativo.