将十六进制字符串解析为整数会引发NumberFormatException?

时间:2012-07-07 19:17:01

标签: java integer parseint hex

所以,在Java中,你知道如何声明这样的整数:

int hex = 0x00ff00;

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

Integer.valueOf(primary.getFullHex());

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

这是getFullHex方法:

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

当我调用此方法时,它会给我NumberFormatException

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

我无法理解发生了什么。有人可以解释一下吗?

5 个答案:

答案 0 :(得分:80)

这会有帮助吗?

Integer.parseInt("00ff00", 16)

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

在您的情况下Integer.parseInt(primary.getFullHex(), 16)由于0x前面加getFullHex()前缀而无法正常工作 - 摆脱并且您会没事的。

答案 1 :(得分:37)

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

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

请注意Integer.valueOf(字符串,16);不接受0x的前缀。如果您的字符串包含0x前缀,则可以使用Integer.decode(“0x00ff0000”);

答案 2 :(得分:3)

parseInt 方法只接受数字部分,而不是任何类型的“基础”指示符,例如十六进制的“0x”或八进制的“0”。像这样使用它

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

答案 3 :(得分:1)

这应该这样做:

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

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

String hex = Integer.toHexString(12); 

答案 4 :(得分:0)

这项工作可以吗?

Long.parseUnsignedLong(value, 16);