web-dev-qa-db-ja.com

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

したがって、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"

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

36
mattbdean

これは役立ちますか?

Integer.parseInt("00ff00", 16)

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

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

81

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

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

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

37
nos

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

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)

24

parseIntメソッドは、数値部分のみを受け入れ、16進数の場合は「0x」、8進数の場合は「0」など、いかなる種類の「ベース」インジケータも受け入れません。このように使用します

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

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

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

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

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

これは機能しますか?

Long.parseUnsignedLong(value, 16);
0
Matt