请向我解释这个方法/代码是如何执行的

时间:2015-02-27 03:46:31

标签: java casting char

//x2ten Method: Convert everything to base 10
public static int x2ten(String s, int base){    
    s = s.toUpperCase();
    int ret = 0;
    //int multiplier = 1;
    for (int i=0; i<s.length(); i++){
        char c = s.charAt(i);
        int cInt = c -'0';

        if ('c' >=0 && c <='9'){
            cInt = c -'0';
        }
        else if(c >='A' && c <= 'Z'){
            cInt = c - 'A' +10;
        }       
        ret = ret * base + cInt;
    }
    return ret;
}

有人可以向我解释这段代码是如何工作的???按行

  

int cInt = c - &#39; 0&#39;;

     

cInt = c - &#39; A&#39; 10;

我具体地不了解这些线是如何进行的。是什么影响&#34; - &#39; 0&#39; &#34;或&#34; - &#39; A&#39; &#34;等

1 个答案:

答案 0 :(得分:2)

您询问的两个特定行,即

int cInt = c -'0';
cInt = c - 'A' +10;

是代码中唯一棘手的行。一旦你理解了他们的所作所为,你将能够很好地理解整个事情。

两行都将表示数字的字符转换为该数字的数字值。因此,字符'0'被翻译为0,字符'1'被翻译为1,依此类推。这是通过从字符的数字代码中减去零的数字代码来完成的。由于数字字符的数字代码在UNICODE中是连续的,因此减法产生所需的结果。

第二行也是如此,除了十位以上的数字,由字母'A''B''C'等表示。 'A'表示10'B'表示11等。同样,字母代码是连续的,因此减去字符'A'的代码并抵消10(因为'A'代表十位数)产生11位及以上的“数字”的数值。