47

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

int hex = 0x00ff00;

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

Integer.valueOf(primary.getFullHex());

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

これはgetFullHex方法です:

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

このメソッドを呼び出すと、 this が返されますNumberFormatException:

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

何が起こっているのか理解できません。誰か説明してくれませんか?

4

6 に答える 6

94

これは役に立ちますか?

Integer.parseInt("00ff00", 16)

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

あなたの場合、接頭辞が前に付いInteger.parseInt(primary.getFullHex(), 16)ているために機能しません- 取り除けば大丈夫です。0xgetFullHex()

于 2012-07-07T19:20:45.930 に答える
40

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

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

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

于 2012-07-07T19:24:58.983 に答える
38

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

Integer.decode("0x00ff00");

デコード可能な文字列:

  • 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)

于 2016-08-16T13:15:10.000 に答える
4

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

int decimal = Integer.parseInt("1234", 10);
int octal = Integer.parseInt("1234", 8);
int hex = Integer.parseInt("1234", 16);
于 2012-07-07T19:24:10.693 に答える
1

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

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

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

String hex = Integer.toHexString(12); 
于 2012-07-07T19:23:45.203 に答える