Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Convertir hexadecimal a entero sin signo

Hola,

En un programa quiero poder seleccionar un color, convertir su valor RGBa a su representación hexadecimal y guardarlo como cadena de texto para después recuperarlo y hacer el proceso a la inversa.

El problema que me encuentro es la "a" de RGBa, que es el canal alfa de transparencia. Eso da lugar a cuatro bytes de información (los cuatro bytes del entero) y a que el resultado sea negativo. Al convertir ese resultado a hexadecimal usando Integer.asHexString(), obtengo, para el color gris, FF808080. Cuando luego quiero convertirlo de vuelta a entero, al ejecutar Integer.parseInt(cadenaHex, 16) obtengo una excepción (NumberFormatException) debido a que el número no se transfiere "bit por bit" al entero y, por tanto, produce un desbordamiento.

Ahora bien, hace tanto tiempo que no me encuentro con este tipo de problemas que tengo que admitir que estoy bastante perdido. ¿Cómo puedo generar el negativo hexadecimal?
Aparte de obtener los valores RGB con getRed, getGreen y getBlue por separado, claro.

Es más curiosidad que otra cosa, la verdad. :-)

noviembre 9, 2014 | Registered Commenterrickiees

http://stackoverflow.com/questions/10681312/converting-from-hex-to-int-in-java

noviembre 10, 2014 | Registered Commenterchoces

Muchas gracias, seguramente debería haber comenzado por StackOverflow, pero como entendía que el motivo era que estaba provocando un desbordamiento, me fui por la aritmética booleana y el bit shifting. Lo que no imaginé es que incluso estaba considerado un bug en Java. :-) Por cierto, que tengo que decir el bug figura como solucionado en Java SE 8u25 y esa es la versión en la que he experimentado el problema.

Gracias de nuevo.

noviembre 12, 2014 | Registered Commenterrickiees