尝试使用此代码将数字字符串转换为二进制
public static int convert(String text)
{
int num =0;
for(int i =0; i<text.length();i++)
{
if(((int)text.charAt(i)>=48)&&((int)text.charAt(i)<=59))
{
System.out.println("Before: i = " + i + " num = "+ num+" char = "+ text.charAt(i) + "numchar = " + ((int)text.charAt(i)-48));
num = num*10 + ((int)text.charAt(i)-48);
System.out.println("After: i = " + i + " num = "+ num+" char = "+ text.charAt(i) + "numchar = " + ((int)text.charAt(i)-48));
}
}
return num;
}
}
但是,一旦它达到第10个数字,即使我的测试字符串是二进制的,输出也会变成带有负数和随机数的完整杂物。知道为什么会这样吗?
最佳答案
Java中的int
数据类型是32位有符号整数,因此它可以表示的最大值为2 ^ 31-1 =2147483647。由于您尝试解析大于此的数字,因此算术将导致integer overflow 。
要解决此问题,您将需要使用可以表示较大整数的数据类型,例如long
(最多约19位数字)或BigInteger(任意大)。