1 回答

TA貢獻1836條經驗 獲得超5個贊
好的,讓我們一行一行
public static int getDecimal(String hex)
hex 是參數,它需要在那里聲明,所以你可以在調用函數時傳遞一個字符串。
String digits = "0123456789ABCDEF";
是的,這聲明了一個字符串,其中包含可以出現在十六進制數中的所有字符。
hex = hex.toUpperCase();
它將十六進制字符串中的字母轉換為大寫,以使其保持一致,即無論輸入哪個,您總是有 F 而從來沒有 f。
int val = 0;
這是稍后將包含相應十進制值的變量。我們將使用此變量進行計算。
for (int i = 0; i < hex.length(); i++)
hex.length()
是提供的十六進制字符串中的字符數。我們對每個字符執行一次 for 循環中的代碼。
char c = hex.charAt(i);
是的,char 代表單個字符。我們從索引 i 處的十六進制字符串中檢索字符,因此在第一次迭代中它是第一個字符,在第二次迭代中是第二個字符,依此類推。
int d = digits.indexOf(c);
我們查看字符在 digit-String 中的索引。通過這種方式,我們確定了這個特定數字的十進制表示。就像 0-9 保持 0-9 而 F 變成 15。
val = 16*val + d;
讓我們想想我們必須做什么。我們有數字的十進制值。但是在十六進制中,我們將這個數字放在一個特定的位置,它會與它相乘。就像'100'中的'1'實際上不是1,而是100 * 1,因為它在這個位置。十六進制的10是十進制的16,因為我們有1 * 16?,F在這里的方法有點復雜。val 不是未初始化的。val 開始時為 0,然后包含來自先前迭代的累積值。由于 String 中的第一個字符是最高位置我們不直接知道我們必須乘以什么,因為我們不知道數字有多少位(實際上我們知道,但這種方法沒有使用這個) . 所以我們只需將數字值添加到它。在連續迭代中,它將乘以 16 以將其放大到相應的數字基值。讓我給你看一個例子:
取25F作為十六進制數?,F在第一次迭代取 2 并將其轉換為 2 并將其添加到 val。在16 * val
0做出決議,從而不能有效地在第一時間。
下一次迭代將 2 與 16 相乘,并取 5(轉換為 5)并將其添加到 val。所以現在我們有了(我用數學方法把它分開,所以你理解它): 2 * 16 + 5
接下來我們得到十進制 15 的 F。我們將 val 乘以 16 并加上 15。
我們得到2 * 256 + 5 * 16 + 16 (* 1)
,這實際上是您如何以數學方式計算此十六進制值的十進制值。
計算 val 的另一種可能性是:
val += Math.pow(16, hex.length() - i - 1) * d;
添加回答
舉報