16進文字列を整数に解析すると、NumberFormatExceptionがスローされますか?

2012年07月08日に質問されました。  ·  閲覧回数 72k回  ·  ソース

mattbdean picture
2012年07月08日

したがって、Javaでは、次のように整数を宣言する方法を知っています。

int hex = 0x00ff00;

そのプロセスを逆にすることができるはずだと思いました。 私はこのコードを持っています:

Integer.valueOf(primary.getFullHex());

ここで、primaryはカスタムColorクラスのオブジェクトです。 コンストラクターは、不透明度(0〜99)の整数と16進文字列(例: 00ff00 )を取ります。

これはgetFullHexメソッドです。

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

このメソッドを呼び出すと、これがNumberFormatExceptionます。

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

何が起こっているのか理解できません。 誰か説明してもらえますか?

回答

Tomasz Nurkiewicz picture
2012年07月08日
87

これは役に立ちますか?

Integer.parseInt("00ff00", 16)

16は、文字列を16ベース(16進数)として解釈する必要があることを意味します。 2を使用すると、2進数を解析できます。 8は8進数を表します。 10がデフォルトであり、10進数を解析します。

あなたの場合、 Integer.parseInt(primary.getFullHex(), 16)0xプレフィックスの前にgetFullHex()付いているため、機能しません-削除すれば大丈夫です。

nos picture
2012年07月08日
39

Integer.valueOf(string)は、10進表現を想定しています。 数値が16進形式であることを指定する必要があります。例:

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

Integer.valueOf (string、16);に注意してください。 0xプレフィックスを受け入れません。 文字列に0xプレフィックスが含まれている場合は、 Integer.decode ( "0x00ff0000");を使用できます。

Konstantin Labun picture
2016年08月16日
35

デコード方法を使用してみてください:

Integer.decode("0x00ff00");

DecodableString:

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

ここでそれについて読むことができますhttps://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#decode(java.lang.String)

Roger Lindsjö picture
2012年07月08日
3

parseIntメソッドは数値部分のみを受け入れ、16進数の「0x」や8進数の「0」などの「ベース」インジケーターは受け入れません。 このように使用してください

int decimal = Integer.parseInt("1234", 10);
int octal = Integer.parseInt("1234", 8);
int hex = Integer.parseInt("1234", 16);
GETah picture
2012年07月08日
1

これはそれを行う必要があります:

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

また、整数の16進表現を生成する場合は、次を使用します。

String hex = Integer.toHexString(12); 
Matt picture
2019年08月08日
0

これは機能しますか?

Long.parseUnsignedLong(value, 16);