2012-07-07 7 views
30

Così, in Java, si sa come è possibile dichiarare interi in questo modo:L'analisi di una stringa esadecimale in un numero intero genera un valore NumberFormatException?

int hex = 0x00ff00; 

ho pensato che si dovrebbe essere in grado di invertire questo processo. Ho questo codice:

Integer.valueOf(primary.getFullHex()); 

dove primario è un oggetto di una classe Colore personalizzata. Il costruttore prende un numero intero per opacità (0-99) e una stringa esadecimale (ad esempio 00ff00).

Questo è il metodo getFullHex:

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

Quando chiamo questo metodo dà il mio presente NumberFormatException:

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

non riesco a capire cosa sta succedendo. Qualcuno può spiegare per favore?

risposta

75

Questo sarà d'aiuto?

Integer.parseInt("00ff00", 16) 

16 significa che si dovrebbe interpretare la stringa come 16-based (esadecimale). Utilizzando 2 è possibile analizzare il numero binario, 8 sta per ottale. 10 è l'impostazione predefinita e analizza i numeri decimali.

Nel tuo caso Integer.parseInt(primary.getFullHex(), 16) non funziona a causa del prefisso 0x anteposto a getFullHex() - elimina e starai bene.

+1

Grazie! Non sapevo che 'Integer.parseInt (..)' potesse prendere un altro parametro! Grazie per averlo chiarito! – mattbdean

+0

Oh uomo sono stato vittima di questo anche – JohnMerlino

+0

non funziona java.lang.NumberFormatException: int non valido: "0x920B540C", color2 = Integer.parseInt (color_2,16); (con argbA) – delive

1

Questo dovrebbe farlo:

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

E se si desidera generare rappresentazione esadecimale di un numero intero, utilizzare

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

'toHexString()'? Cos'è quello? –

+0

@JeremyHolovacs controlla questo http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#toHexString(int) – GETah

+0

Duh ... sentiti stupido ora, ho pensato questo era domanda # ac ... –

3

Il metodo parseInt accetta solo la parte numero, non alcun tipo di indicatore "base" come "0x" per esadecimale o "0" per ottale. Utilizzare in questo

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

Integer.valueOf (stringa) assume una rappresentazione decimale. Devi specificare che il numero è in formato esadecimale, ad es.

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

Nota che Integer.valueOf (stringa, 16); non accetta un prefisso 0x.Se la stringa contiene il prefisso 0x, è possibile utilizzare Integer.decode ("0x00ff0000");

+9

In che modo 'Integer.decode' non è la risposta giusta? – ubiquibacon

+0

Ehi, funziona solo per 00ff0000 non per 80ff0000. Ho una stringa come String hex = "803BB9FF"; e voglio nascondere questo in int color = 0x803BB9FF per favore aiuto –

+0

@AshishSahu È impossibile aiutare quando non descrivi cosa succede e cosa ti aspetti che accada. 0x803BB9FF è -2143569409 (dato che int in Java è firmato). Quindi cosa "non funziona" per -2143569409? – nos

Problemi correlati