したがって、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"
何が起こっているのか理解できません。誰か説明してもらえますか?
これは役立ちますか?
Integer.parseInt("00ff00", 16)
16
は、文字列を16ベース(16進数)として解釈する必要があることを意味します。 2
を使用すると、2進数を解析できます。8
は8進数を表します。 10
はデフォルトであり、10進数を解析します。
あなたの場合、Integer.parseInt(primary.getFullHex(), 16)
が先頭に0x
プレフィックスを追加しているため、getFullHex()
は機能しません-削除すれば大丈夫です。
Integer.valueOf(string)は10進表現を想定しています。番号が16進形式であることを指定する必要があります。
int value = Integer.valueOf("00ff0000", 16);
Integer.valueOf (string、16); 0x
のプレフィックスは受け入れません。文字列に0x
プレフィックスが含まれている場合、 Integer.decode ( "0x00ff0000");を使用できます。
デコード方法を使用してみてください:
Integer.decode("0x00ff00");
DecodableString:
それについてはここで読むことができます https://docs.Oracle.com/javase/7/docs/api/Java/lang/Integer.html#decode(Java.lang.String)
parseIntメソッドは、数値部分のみを受け入れ、16進数の場合は「0x」、8進数の場合は「0」など、いかなる種類の「ベース」インジケータも受け入れません。このように使用します
int decimal = Integer.parseInt("1234", 10);
int octal = Integer.parseInt("1234", 8);
int hex = Integer.parseInt("1234", 16);
これはそれを行う必要があります:
String hex = "FA";
int intValue = Integer.parseInt(hex, 16);
整数の16進表現を生成する場合は、使用します
String hex = Integer.toHexString(12);
これは機能しますか?
Long.parseUnsignedLong(value, 16);