//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;等
答案 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位及以上的“数字”的数值。