web-dev-qa-db-fra.com

L'analyse d'une chaîne hexadécimale à un entier lève une exception NumberFormatException?

Donc, en Java, vous savez comment déclarer des entiers comme celui-ci:

int hex = 0x00ff00;

Je pensais que vous devriez pouvoir inverser ce processus. J'ai ce code:

Integer.valueOf(primary.getFullHex());

où primaire est un objet d'une classe de couleur personnalisée. Son constructeur prend un entier pour l'opacité (0-99) et une chaîne hexadécimale (par exemple 00ff00).

Voici la méthode getFullHex:

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

Quand j'appelle cette méthode, cela donne mon NumberFormatException:

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

Je ne comprends pas ce qui se passe. Quelqu'un peut-il expliquer?

36
mattbdean

Est-ce que cela vous aidera?

Integer.parseInt("00ff00", 16)

16 Signifie que vous devez interpréter la chaîne en 16 (hexadécimal). En utilisant 2 Vous pouvez analyser un nombre binaire, 8 Signifie octal. 10 Est la valeur par défaut et analyse les nombres décimaux.

Dans votre cas, Integer.parseInt(primary.getFullHex(), 16) ne fonctionnera pas en raison du préfixe 0x Ajouté par getFullHex() - débarrassez-vous et tout ira bien.

81
Tomasz Nurkiewicz

Integer.valueOf (string) suppose une représentation décimale. Vous devez spécifier que le nombre est au format hexadécimal, par ex.

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

Notez que Integer.valueOf (chaîne, 16); n'accepte pas un préfixe de 0x. Si votre chaîne contient le 0x préfixe, vous pouvez utiliser Integer.decode ("0x00ff0000");

37
nos

Essayez d'utiliser la méthode de décodage:

Integer.decode("0x00ff00");

DecodableString:

  • Signopt DecimalNumeral
  • Signopt 0x HexDigits
  • Signopt 0X HexDigits
  • Signopt # HexDigits
  • Signopt 0 OctalDigits

Vous pouvez en lire plus ici https://docs.Oracle.com/javase/7/docs/api/Java/lang/Integer.html#decode (Java.lang.String)

24
Konstantin Labun

La méthode parseInt accepte uniquement la partie numérique, pas tout type d'indicateur "de base" tel que "0x" pour hexadécimal ou "0" pour octal. Utilisez-le comme ça

int decimal = Integer.parseInt("1234", 10);
int octal = Integer.parseInt("1234", 8);
int hex = Integer.parseInt("1234", 16);
3
Roger Lindsjö

Cela devrait le faire:

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

Et si vous souhaitez générer une représentation hexadécimale d'un entier, utilisez

String hex = Integer.toHexString(12); 
1
GETah

Est-ce que cela fonctionnerait?

Long.parseUnsignedLong(value, 16);
0
Matt