混淆“将数字字符数组转换为int值”行为

时间:2014-08-03 20:36:07

标签: java

"将数字字符数组转换为int值。"

以下是代码:

public static int parseInt(char[] a){
    int result=0;
    for(int i=0;i<a.length;i++){
        result=result*10+(a[i]-'0');
    }
    return result;
}

我的问题是:为什么我们在此方法中需要-'0'

第二个问题是:如果它不是数字字符,例如,如果它只是一个字符数组,例如char[] a={'a','b','c','d','e'}

如何调整代码以将其转换为数值?

2 个答案:

答案 0 :(得分:1)

字符&#39; 0&#39;到&#39; 9&#39;等价于48到57的int值,因此要获取char表示的值,必须将其减去48。

对于你的第二个问题,什么意味着转换&#39; a&#39;变成数值?

答案 1 :(得分:0)

你的问题比第一眼看上去更有趣。普通人使用基数为10的数字,并且在任何已知的0到9的字符集数字中都有连续值。所以“x”的值,其中“x”是从“0”到“9”的字符是“x” - “0”。

但数学家在任意基数中使用数字。基数2(二进制),8(八进制)和16(十六进制)对于信息学家来说是最新的,但是基数12(及其导数60)在小时,分钟和秒中间接使用。较旧的货币系统部分使用12,因为除以2,3或4是准确的。

Java通过Character.getNumericValue(char c)承认这些任意基础:

  • 'x' - '0'表示字符'0'到'9'
  • 'x' - 'a'+ 10代表字符'a'到'z'(包括衍生品:'é'与'e'相同)
  • 'X' - 字符'A'到'Z'的'A'+ 10(包括大写衍生词)

因此,对大量字符的泛化将是:

public static int parseInt(char[] a){
    int result=0;
    for(int i=0;i<a.length;i++){
        result=result*base+(Character.getNumericValue(a[i]);
    }
    return result;
}

你可以控制它为char[] a={'a','b','c','d','e', 'f'}的十六进制提供正确的结果,其中base = 16。