2012-03-17 78 views
4

在我的应用程序中,我使用了一个转换器来创建3个值> RGB-颜色的十六进制值。 我用它在运行时在我的应用程序中设置我的渐变背景。在一个整数中存储十六进制值(0x45E213)

现在是下列问题。 转换器的结果是(String)#45E213,这不能存储在一个整数。 但是当你创建一个整数,

int hex = 0x45E213; 

它正常工作,这不给错误。

现在我知道了这一点,我将#更换为0x,并试图将其从String转换为Integer。

int hexToInt = new Integer("0x45E213").intValue(); 

但现在我得到的numberFormatException,因为在转换,也不会与字符E同意吗?

我该如何解决这个问题?因为我真的需要它作为整数或Java/Eclipse不会在其方法中使用它。

回答

9

http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html

的整数构造一个字符串的行为与parseInt函数与基数10.您大概想String.parseInt与基数16

String.parseInt("45E213", 16) 

或切断0X

Integer.parseInt("0x45E213".substring(2), 16); 

Integer.parseInt("0x45E213".replace("0x",""), 16); 
+0

我猜你的意思的Integer.parseInt ( “45E213”);.你需要去掉字符串0x – 2012-03-17 11:15:21

+0

是的,我只是测试了它。 – 2012-03-17 11:17:27

+0

感谢ParseInt的想法和快速回复,它工作。只有我的背景不会改变颜色,但这是另一种修复方法。 – 2012-03-17 12:54:20

3

此方法接受您的字符串 可以使用Color.parseColor(String)但你需要#

+0

这将是有益的,如果我需要颜色来设置背景,这是当我只需要1纯色,但我需要创建一个渐变背景,因此,你需要两个小数。 – 2012-03-17 13:00:53

7

更换0x前缀鲜为人知Integer.decode(字符串)可能是有用的在这里。注意它也会做前导零为八进制,你可能不希望的,但如果你的东西便宜欢快之后是......

int withHash = Integer.decode("#45E213"); 
System.out.println(Integer.toHexString(withHash)); 

int withZeroX = Integer.decode("0x45E213"); 
System.out.println(Integer.toHexString(withZeroX)); 

输出

45e213 
45e213