在java中从十六进制转换为int

use*_*235 1 java int hex

由于以下代码行,我收到错误:

int x = color(Integer.parseInt("ffffffde",16));
Run Code Online (Sandbox Code Playgroud)

我想这可能是因为它是一个负值

任何想法为什么,如何或如何解决它?

编辑:

对不起,没有包含实际错误.这里是:

线程"动画线程"中的异常java.lang.NumberFormatException:对于输入字符串:java.lang.Integer.parseInt(未知源)中java.lang.NumberFormatException.forInputString(未知源)的"ffffffde"

编辑2:

值("ffffffde")由以下代码创建:

Integer.toHexString(int_val);
Run Code Online (Sandbox Code Playgroud)

编辑3:原来这是一个已知的错误(http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4215269)虽然您可以将整数转换为十六进制字符串,但如果它们是负数,则无法将它们转换回来!

jue*_*n d 11

ffffffde 大于整数最大值

Java int是32位有符号类型,范围从-2,147,483,648到2,147,483,647.

ffffffde = 4,294,967,262 
Run Code Online (Sandbox Code Playgroud)

编辑

您曾经Integer.toHexString(int_val)将int转换为十六进制字符串.从该方法的文档:

返回整数参数的字符串表示形式,作为基数为16 的无符号整数.

不过int是一个签字类型.

使用

int value = new BigInteger("ffffffde", 16).intValue();
Run Code Online (Sandbox Code Playgroud)

将其作为负值取回.

  • `+ 1`很好的答案,顺便说一下我也认识那个人[你在这里说话](http://meta.stackexchange.com/questions/176318/what-is-considered-incorrect-tagging). (3认同)

Ume*_*wte 5

如果你收到这样的错误,

Exception in thread "main" java.lang.NumberFormatException: For input string: "ffffffde"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:461)
    at com.TestStatic.main(TestStatic.java:22)
Run Code Online (Sandbox Code Playgroud)

那么你传递的价值就是ffffffde.这不是解析为int的有效十六进制值.

请试试这个

int x = Integer.parseInt("ffffde",16);
        System.out.println(x);
Run Code Online (Sandbox Code Playgroud)

它应该工作.

对于十六进制值,您必须将其解析为Long

Long x = Long.parseLong("ffffffde",16);
        System.out.println(x);
Run Code Online (Sandbox Code Playgroud)

这也应该有效