1

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

int x = color(Integer.parseInt("ffffffde",16));

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

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

编辑:

抱歉,没有包含实际错误。这里是:

线程“动画线程”java.lang.NumberFormatException 中的异常:对于输入字符串:java.lang.NumberFormatException.forInputString(Unknown Source) 处 java.lang.Integer.parseInt(Unknown Source) 处的“ffffffde”

编辑2:

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

Integer.toHexString(int_val);

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

4

2 回答 2

11

ffffffde大于整数最大值

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

ffffffde = 4,294,967,262 

编辑

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

将整数参数的字符串表示形式返回为基数为16 的无符号整数。

但是int是有符号类型。

采用

int value = new BigInteger("ffffffde", 16).intValue();

将其作为负值取回。

于 2012-05-21T07:52:40.860 回答
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)

然后,您传递的值存在问题,即ffffffde。这不是解析为 int 的有效十六进制值。

请试试这个

int x = Integer.parseInt("ffffde",16);
        System.out.println(x);

它应该工作。

对于超过该值的十六进制值,您必须解析为Long

Long x = Long.parseLong("ffffffde",16);
        System.out.println(x);

这也应该有效

于 2012-05-21T07:56:16.680 回答