1

当我将许多十六进制字符插入到正在转换为整数值的字符串中时,我收到一个异常。

代码:

//variables used in this problem
int INT_MAX = 2147483647;
int INT_MIN = -2147483648;
int currentBase = 16;
string displayValue;

switch(currentBase) {
    case 16:
        if((Integer.valueOf(displayValue + "F", currentBase) >= INT_MIN) && (Integer.valueOf(displayValue + "F", currentBase) <= INT_MAX))
        {
            displayValue += "F";
        }
        break;
}

错误信息:

E/AndroidRuntime(6944): Caused by: java.lang.NumberFormatException: Invalid int: "FFFFFFFF"
E/AndroidRuntime(6944):     at java.lang.Integer.invalidInt(Integer.java:138)
E/AndroidRuntime(6944):     at java.lang.Integer.parse(Integer.java:378)
E/AndroidRuntime(6944):     at java.lang.Integer.parseInt(Integer.java:366)
E/AndroidRuntime(6944):     at java.lang.Integer.valueOf(Integer.java:510)
E/AndroidRuntime(6944):     at com.example.calculator.MainActivity.send_f(MainActivity.java:968)

我需要这个字符串的值不大于 size int(32 位)。有什么建议么?

4

4 回答 4

1

FFFFFFFF 太大,最大 int 值为 0x7FFFFFFF 解决方法是

int i = (int)Long.parseLong(hexStr, 16);
于 2013-09-01T03:29:31.883 回答
1

Greg Hewgill 的评论是正确的。看起来您正在尝试自动解释这些位。可能最简单的事情是

 Long.valueOf(displayValue + "F", currentBase).intValue();

获取这些位,然后将它们截断为 int。当然,现在您有责任确保 to 的参数Long.valueOf适合 32 位。

于 2013-09-01T03:27:08.220 回答
0
try {
    // try your calculation here
} catch (NumberFormatException e) {
    // assign the variable the max/min value instead
    // or whatever behavior you want
}

This code will provide default behaviors for numbers that are out of range.

于 2013-09-01T03:17:25.670 回答
0

在我看来,您在将十六进制字符串转换为 int 时使用了错误的方法,如果我的理解是错误的,请告诉我

我引用了一个重复的帖子

    String hex = "ff"

// small values
    int value = Integer.parseInt(hex, 16);  

// big values
    BigInteger value = new BigInteger(hex, 16);

请参阅我引用的重复帖子

方法的 API 参考

于 2013-09-01T03:21:09.323 回答