Java 开发 Integer.parseInt 问题:java.lang.NumberFormatException: For input string...

String address = "20:25:05:05:03:02";

String numStr = address.replace(":", "");
int num;
try {
    num = Integer.parseInt(numStr, 16);
} catch (Exception e) {
    e.printStackTrace();
    num = 0;
}

System.out.println(num);
  • 在 Java 开发中,执行上述代码,报如下错误
java.lang.NumberFormatException: For input string: "202505050302" under radix 16
问题原因
  1. 这个错误是因为将一个过大的十六进制数转换为 int 类型导致的

  2. 该十六进制数的十进制值为:0x202505050302 = 35,343,370,093,314,int 类型的最大值为 2,147,483,647

处理策略
  1. 使用 Long.parseLong(),long 的范围是 -9,223,372,036,854,775,8089,223,372,036,854,775,807,可以容纳
String address = "20:25:05:05:03:02";

String numStr = address.replace(":", "");
long num = 0;
try {
    num = Long.parseLong(numStr, 16);
} catch (Exception e) {
    e.printStackTrace();
    num = 0;
}

System.out.println(num);
  1. 如果数字可能超过 long 的范围,可以使用 BigInteger,适用于超大数字
String address = "20:25:05:05:03:02";

String numStr = address.replace(":", "");
BigInteger num;
try {
    num = new BigInteger(numStr, 16);
} catch (Exception e) {
    e.printStackTrace();
    num = BigInteger.ZERO;
}

System.out.println(num);

你可能感兴趣的:(后端,-,问题清单,java,后端,开发语言,intellij-idea,intellij,idea,java-ee,服务器)