47

因此,在 Java 中,您知道如何声明整数,如下所示:

int hex = 0x00ff00;

我认为你应该能够扭转这个过程。我有这个代码:

Integer.valueOf(primary.getFullHex());

其中 primary 是自定义 Color 类的对象。它的构造函数需要一个整数来表示不透明度(0-99)和一个十六进制字符串(例如00ff00)。

这是getFullHex方法:

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

当我调用这个方法时,它给了我这个NumberFormatException

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

我不明白发生了什么事。有人可以解释一下吗?

4

6 回答 6

94

这会有帮助吗?

Integer.parseInt("00ff00", 16)

16意味着您应该将字符串解释为基于 16 的(十六进制)。通过使用2你可以解析二进制数,8代表八进制。10是默认值并解析十进制数。

在你的情况下Integer.parseInt(primary.getFullHex(), 16),由于0x前缀由getFullHex()- 前缀而无法工作,你会没事的。

于 2012-07-07T19:20:45.930 回答
40

Integer.valueOf(string) 采用十进制表示。您必须指定数字是十六进制格式,例如

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 十进制数字
  • Signopt 0x HexDigits
  • Signopt 0X HexDigits
  • Signopt #HexDigits
  • Signopt 0 八进制数字

你可以在这里阅读 https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#decode(java.lang.String)

于 2016-08-16T13:15:10.000 回答
4

parseInt方法只接受数字部分,而不接受任何类型的“base”指示符,例如十六进制的“0x”或八进制的“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);

如果要生成整数的十六进制表示,请使用

String hex = Integer.toHexString(12); 
于 2012-07-07T19:23:45.203 回答
0

这行得通吗?

Long.parseUnsignedLong(value, 16);
于 2019-08-07T20:38:01.293 回答