需要一些关于十六进制到十进制算法如何工作的解释
Need some explanation about how the hex to decimal algorithm works
下面的算法将十六进制转换为十进制,但我很困惑,这个解决方案是如何工作的?
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)*
该算法利用了这样一个事实,即我们可以通过重复将 16 相乘来计算 16^Y,并且我们可以分解出 16 的常见乘法。从您的示例中,您将结束于:
13*16 + 10)*16 + 1)*16 + 4)*16 + 5
我省略了前导括号,如您所见,13 实际上是 16 的四次乘积。
该算法与您执行的操作几乎相同。它接受一个字符串并将每个字符与给定值进行比较。该值由数字评估,它所在的位置(例如,A 位于第 10 个位置,因为我们从 0 开始计数)。这允许轻松更改它,例如到 17 位系统而不是十六进制。
编辑:关于16的幂,看@skykings的回答。
下面的算法将十六进制转换为十进制,但我很困惑,这个解决方案是如何工作的?
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)*
该算法利用了这样一个事实,即我们可以通过重复将 16 相乘来计算 16^Y,并且我们可以分解出 16 的常见乘法。从您的示例中,您将结束于:
13*16 + 10)*16 + 1)*16 + 4)*16 + 5
我省略了前导括号,如您所见,13 实际上是 16 的四次乘积。
该算法与您执行的操作几乎相同。它接受一个字符串并将每个字符与给定值进行比较。该值由数字评估,它所在的位置(例如,A 位于第 10 个位置,因为我们从 0 开始计数)。这允许轻松更改它,例如到 17 位系统而不是十六进制。
编辑:关于16的幂,看@skykings的回答。