2012-07-07 7 views
30

Así, En Java, se sabe cómo puede declarar enteros como esto:¿Al analizar una cadena hexadecimal en un entero se arroja una NumberFormatException?

int hex = 0x00ff00; 

pensé que usted debería ser capaz de revertir ese proceso. Tengo este código:

Integer.valueOf(primary.getFullHex()); 

donde primario es un objeto de una clase de color personalizada. Su constructor toma un entero para la opacidad (0-99) y una cadena hexagonal (por ejemplo, 00ff00).

Este es el método getFullHex:

public String getFullHex() { 
    return ("0x" + hex); 
} 

Cuando llamo a este método se le da a mi esta NumberFormatException:

java.lang.NumberFormatException: For input string: "0xff0000" 

No puedo entender lo que está pasando. ¿Alguien puede explicar?

Respuesta

75

¿Esto es útil?

Integer.parseInt("00ff00", 16) 

16 significa que debe interpretar la cadena como 16 a base de (hexadecimal). Al usar 2 puede analizar el número binario, 8 significa octal. 10 es predeterminado y analiza números decimales.

En su caso Integer.parseInt(primary.getFullHex(), 16) no funcionará debido al prefijo 0x precedido por getFullHex() - deshacerse de él y todo irá bien.

+1

Gracias! ¡No sabía que 'Integer.parseInt (..)' podría tomar otro parámetro! ¡Gracias por aclarar eso para mí! – mattbdean

+0

Oh, hombre, yo también fui víctima de esto – JohnMerlino

+0

no funciona java.lang.NumberFormatException: Invalid int: "0x920B540C", color2 = Integer.parseInt (color_2,16); (con argbA) – delive

1

Esto debe hacerlo:

String hex = "FA"; 
int intValue = Integer.parseInt(hex, 16); 

Y si desea generar la representación hexadecimal de un número entero, utilice

String hex = Integer.toHexString(12); 
+0

'toHexString()'? ¿que es eso? –

+0

@JeremyHolovacs echa un vistazo a esto http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#toHexString(int) – GETah

+0

Duh ... me siento estúpido ahora, pensé que esto was aC# question ... –

3

El método parseInt sólo acepta el número de parte, no cualquier tipo del indicador "base" como "0x" para hexadecimal o "0" para octal. Úselo así

int decimal = Integer.parseInt("1234", 10); 
int octal = Integer.parseInt("1234", 8); 
int hex = Integer.parseInt("1234", 16); 
37

Integer.valueOf (cadena) asume una representación decimal. Debe especificar que el número está en formato hexadecimal, p.

int value = Integer.valueOf("00ff0000", 16); 

Tenga en cuenta que Integer.valueOf (string, 16); no acepta un prefijo de 0x.Si su cadena contiene el prefijo 0x, puede usar Integer.decode ("0x00ff0000");

+9

¿Cómo es 'Integer.decode' no la respuesta correcta? – ubiquibacon

+0

Oye, esto solo funciona para 00ff0000, no para 80ff0000. Tengo una cadena como String hex = "803BB9FF"; y quiero ocultar esto en int color = 0x803BB9FF por favor ayuda –

+0

@AshishSahu Es imposible ayudar cuando no describes lo que sucede y lo que esperas que suceda. 0x803BB9FF es -2143569409 (ya que int en Java está firmado). Entonces, ¿qué es "no funciona" sobre -2143569409? – nos

Cuestiones relacionadas