【发布时间】:2016-05-09 18:13:56
【问题描述】:
下面的算法将十六进制转换为十进制,但我很困惑,这个解决方案是如何工作的?
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)*
【问题讨论】:
-
使用
|和<< 4而不是+和* 16实际上更快(通常可以忽略不计,除非您重复运行此代码),因为您基本上只是在编辑小点.另外,我认为java.lang.Integer类中有一个方法可以做到这一点? -
@Pemap modder 谢谢,我确定它存在
标签: java algorithm hex decimal