将十六进制值(0x45E213)存储为整数

时间:2012-03-17 11:06:10

标签: java android hex numberformatexception

在我的应用程序中,我使用转换器从3个值创建> RGB颜色为十六进制值。 我用它在运行时在我的应用程序中设置渐变背景。

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

int hex = 0x45E213;

它确实可以正常工作,而且不会出错。

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

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

但现在我得到了numberFormatException,因为在转换时,它会与字符E不一致吗?

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

3 个答案:

答案 0 :(得分:12)

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

带有字符串的Integer构造函数与带有基数10的parseInt的行为相同。您可能希望String.parseInt带有基数16.

Integer.parseInt("45E213", 16)

或切断0x

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

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

答案 1 :(得分:7)

鲜为人知的Integer.decode(String)在这里可能很有用。请注意,它也会以八进制为前导零,你可能不想要它,但如果你正在寻找便宜又开朗的东西......

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

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

输出

45e213
45e213

答案 2 :(得分:4)

此方法接受您的String 您可以使用Color.parseColor(String),但需要将0x前缀替换为#