这里的简单问题是代码:
public class BlankClass
{
public static void main(String []args)
{
String string1 = new String("ABCD1234");
int i = Integer.parseInt(string1);
System.out.println(i);
}
}
这是错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "ABCD1234"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at HelloWorld.main(HelloWorld.java:7)
ABCD1234基数10应等于2,882,343,476,小于2 ^ 32 4,294,967,296:\
但在这种情况下:
public class BlankClass
{
public static void main(String []args)
{
System.out.println(2882343476);
System.out.println(Math.pow(2, 32));
}
}
以下是错误:
BlankClass.java:6: error: integer number too large: 2882343476
System.out.println(2882343476);
^
1 error
答案 0 :(得分:2)
这是因为“ABCD1234”大于Integer.MAX_VALUE
,并且您也没有以十六进制方式解析它。
以下代码有效:
String string1 = new String("ABCD1234");
System.out.println(Long.parseLong(string1, 16));
答案 1 :(得分:0)
如果要解析十六进制数字,则需要指定基数:
String string1 = new String("ABCD");
int i = Integer.parseInt(string1, 16);
但无论如何你需要使用长篇:
2882343476 0xABCD1234
2147483647 Integer.MAX
这就是你的代码:
String string1 = new String("ABCD1234");
long i = Long.parseLong(string1, 16);
请参阅Integer.MAX。