2016-02-01 51 views
0

以下算法將十六進制轉換爲十進制,但我很困惑,該解決方案的工作原理是什麼?需要一些關於十六進制到十進制算法的工作原理

public static int hex2decimal(String s) { 
    String digits = "ABCDEF"; 
    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; 
} 

source

我知道只有一個辦法做到這一點之前,我發現了這一個。 我的意思是,每個人都知道: X*16^Y其中X是要轉換的數量和Y是數(從結束到開始乞討)的位置。

所以,如果你想轉換DA145爲十進制會...

*(5 * 16^0) + (4 * 16^1) + (1 * 16^2) + (10 * 16^3) + (13 * 16^4)* 
+0

因爲你基本上只是編輯半字節,所以它實際上更快(通常忽略不計,除非你重複運行這個代碼)使用'|'和'<< 4'而不是'+'和'* 16'。另外,我認爲在'java.lang.Integer'類中存在一個方法來做到這一點? – SOFe

+0

@Pemap modder謝謝,我相信它存在 – isxaker

回答

5

該算法使用的事實,我們可以反覆多次在一起16的計算16^Y以及我們能分解出由16共同乘法從你的例子中,你將在結束代替:

13*16 + 10)*16 + 1)*16 + 4)*16 + 5 

我省略了領先的括號,如您所見,恰好是13實際上是乘以16缶r次。

1

該算法與您所做的幾乎完全相同。它接受一個字符串並將每個字符與給定的值進行比較。該值由數字評估,它在哪個位置上(例如A在第10位,因爲我們從0開始計數)。這可以容易地改變它,例如到17位數字系統而不是十六進制。

編輯:關於16的權力,看看@skykings的答案。