下面的算法将十六进制转换为十进制,但我很困惑,这个解决方案是如何工作的?
public static int hex2decimal(String s) {
String digits = "0123456789ABCDEF";
s = s.toUpperCase();
int val = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
int d = digits.indexOf(c);
val = 16*val + d;
}
return val;
}
在我发现这个之前,我只知道一种方法。
我的意思是,大家都知道:
X*16^Y
其中 X
是您要转换的数字, Y
是该位置的数字(从结尾到开始)。
因此,如果您想将 DA145
转换为十进制,那么......
*(5 * 16^0) + (4 * 16^1) + (1 * 16^2) + (10 * 16^3) + (13 * 16^4)*
答案 0 :(得分:5)
这个算法使用的事实是我们可以通过重复乘以16来计算16 ^ Y,并且我们可以将常见的乘法分解为16.从你的例子中你将改为:
13*16 + 10)*16 + 1)*16 + 4)*16 + 5
我省略了前导括号,因为你看到它恰好是13实际乘以16四次。
答案 1 :(得分:1)
该算法与您的算法几乎完全相同。它接受一个String并将每个char与给定值进行比较。该值由数字计算,它处于哪个位置(例如,A位于第10位,因为我们从0开始计数)。这允许容易地改变它,例如到17位系统而不是十六进制。
编辑:关于16的权力,请看@skykings的答案。