十六进制字符串到int转换无法正常工作

时间:2013-01-19 15:28:45

标签: java android hex

我有一个存储在字符串中的十六进制数字(颜色),如下所示:“ff62e6b8”。 我需要将其转换回整数,以便我可以再次将其用作颜色值。 我尝试过以下方法:

Int i = Integer.parseInt("ff62e6b8", 16);
Int i = Integer.valueOf("ff62e6b8", 16);
Int i = Integer.decode("ff62e6b8");

但所有这些方法都会引发异常。我在这里错过了什么吗?

4 个答案:

答案 0 :(得分:8)

FF62E6B8的小数为4284671672。它太大了,无法将其放入int。在int中,您可以存储与范围<-2^31 - 1 ; 2^31 - 1>匹配的值。请尝试使用long代替:

Long i = Long.parseInt("ff62e6b8", 16);
Long i = Long.valueOf("ff62e6b8", 16);
Long i = Long.decode("ff62e6b8"); 

答案 1 :(得分:5)

试试这个:

int colorVal = Color.parseColor("#ff62e6b8");

示例:

myLayout.setBackgroundColor(Color.parseColor("#ff62e6b8"));

通过这个,您将获得colorVal = -10295624

如果你想从colorVal 生成 hexColor代码,请使用:

String hexColor = String.format("#%06X", (0xFFFFFF & colorVal));

通过这个,您将获得hexColor = #62E6B8

感谢。

答案 2 :(得分:1)

第一个是好的

但是ff62e6b8超过int的大小(32位 - 签名),这就是引发异常的原因。

Long l = Long.parseLong("ff62e6b8", 16);

应该做的工作

答案 3 :(得分:0)

String hex = "1B";
int val = Integer.parseInt(hex, 16);

这是正确的转换。