【问题标题】:hex string to int conversion not working correctly十六进制字符串到 int 的转换无法正常工作
【发布时间】:2013-01-03 03:52:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: java android hex


    【解决方案1】:

    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"); 
    

    【讨论】:

    • 谢谢,这解释了很多。但是您可以使用长值作为颜色值吗?有没有办法将字符串“ff62e6b8”转换回整数0xff62e6b8?
    • 我认为您正在寻找 Pratik Sharma 解决方案 :)
    • @AdamSznajder 我刚刚编辑了我的解决方案,在需要时会更有帮助,感谢您提出我的名字。 :)
    【解决方案2】:

    试试这个:

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

    示例:

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

    通过这个你会得到colorVal = -10295624

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

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

    通过这个你会得到hexColor = #62E6B8

    谢谢。

    【讨论】:

    • @BrunoCarvalhal 我刚刚编辑了我的解决方案,在需要时会更有帮助。谢谢。
    【解决方案3】:

    第一个会是好的

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

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

    应该做的工作

    【讨论】:

      【解决方案4】:
      String hex = "1B";
      int val = Integer.parseInt(hex, 16);
      

      这是正确的转换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-12
        • 1970-01-01
        • 2017-06-04
        • 2020-01-03
        • 1970-01-01
        • 1970-01-01
        • 2012-01-24
        • 2020-07-18
        相关资源
        最近更新 更多