2012-07-07 62 views
30

所以,在Java中,你知道你可以声明整数这样的:将十六进制字符串解析为整数会引发NumberFormatException?

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" 

我不明白这是怎么回事。有人可以解释吗?

回答

75

这会有帮助吗?

Integer.parseInt("00ff00", 16) 

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

在你的情况下,Integer.parseInt(primary.getFullHex(), 16)将不会工作,因为0x前缀前置getFullHex() - 摆脱,你会没事的。

+1

谢谢!我不知道'Integer.parseInt(..)'可能需要另一个参数!感谢您为我清理! – mattbdean 2012-07-07 22:57:52

+0

呵呵,我也是这个的受害者 – JohnMerlino 2014-07-24 21:09:10

+0

无法正常工作java.lang.NumberFormatException:Invalid int:“0x920B540C”,color2 = Integer.parseInt(color_2,16); (with argbA) – delive 2015-08-05 15:08:56

1

这应做到:

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

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

String hex = Integer.toHexString(12); 
+0

'toHexString()'?那是什么? – 2013-03-03 19:48:10

+0

@JeremyHolovacs检查了这个http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#toHexString(int) – GETah 2013-03-03 20:54:32

+0

Duh ...现在感觉很愚蠢,我认为这个是ac#的问题... – 2013-03-03 21:55:36

3

parseInt函数方法只接受数字部分,没有任何一种基本“指示符,例如”0x“为十六进制或”0“为八进制。像这样使用

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

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

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

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

+9

'Integer.decode'是不是正确的答案? – ubiquibacon 2014-01-09 15:49:16

+0

嘿,这只适用于00ff0000不适用于80ff0000。我有字符串像字符串十六进制=“803BB9FF”;我想要转换成int color = 0x803BB9FF请帮忙 – 2014-05-24 01:48:24

+0

@AshishSahu当你没有描述会发生什么,以及你期望发生什么时,帮助是不可能的。 0x803BB9FF是-2143569409(因为Java中的int被签名)。那么什么是“不工作”约-2143569409? – nos 2014-05-24 01:52:23

相关问题