第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Java 十六進(jìn)制到十進(jìn)制轉(zhuǎn)換:自定義邏輯

Java 十六進(jìn)制到十進(jìn)制轉(zhuǎn)換:自定義邏輯

達(dá)令說 2021-10-28 17:12:29
我想弄清楚如何將十六進(jìn)制轉(zhuǎn)換為字符串和整數(shù),以便我可以通過它的串行端口操作我的 arduino 微控制器上的 RGB 燈。我在 java 網(wǎng)站上找到了一個(gè)很好的例子,但是我很難理解其中的一些方法,而且我被掛斷了。我可以輕松地復(fù)制粘貼此代碼并使其工作,但我想完全理解它。我將在我的理解中添加評(píng)論,希望有人可以提供一些反饋。public class HexToDecimalExample3{    public static int getDecimal(String hex){    //this is the function which we will call later and they are declaring string hex here. Can we declare string hex inside the scope..?    String digits = "0123456789ABCDEF";      //declaring string "digits" with all possible inputs in linear order for later indexing             hex = hex.toUpperCase();        //converting string to uppercase, just "in case"             int val = 0;                    //declaring int val. I don't get this part.             for (int i = 0; i < hex.length(); i++)  //hex.length is how long the string is I think, so we don't finish the loop until all letters in string is done. pls validate this             {                   char c = hex.charAt(i);     //char is completely new to me. Are we taking the characters from the string 'hex' and making an indexed array of a sort? It seems similar to indexOf but non-linear? help me understand this..                 int d = digits.indexOf(c);  //indexing linearly where 0=1 and A=11 and storing to an integer variable                 val = 16*val + d;           //How do we multiply 16(bits) by val=0 to get a converted value? I do not get this..             }               return val;  }  public static void main(String args[]){    System.out.println("Decimal of a is: "+getDecimal("a"));  //printing the conversions out.System.out.println("Decimal of f is: "+getDecimal("f"));  System.out.println("Decimal of 121 is: "+getDecimal("121"));  }}    總結(jié)一下評(píng)論,主要是 char c = hex.charAt(i); AND val = 16*val + d; 我不明白的部分。
查看完整描述

1 回答

?
一只甜甜圈

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊

好的,讓我們一行一行

public static int getDecimal(String hex)

hex 是參數(shù),它需要在那里聲明,所以你可以在調(diào)用函數(shù)時(shí)傳遞一個(gè)字符串。

String digits = "0123456789ABCDEF";

是的,這聲明了一個(gè)字符串,其中包含可以出現(xiàn)在十六進(jìn)制數(shù)中的所有字符。

hex = hex.toUpperCase();

它將十六進(jìn)制字符串中的字母轉(zhuǎn)換為大寫,以使其保持一致,即無論輸入哪個(gè),您總是有 F 而從來沒有 f。

int val = 0;

這是稍后將包含相應(yīng)十進(jìn)制值的變量。我們將使用此變量進(jìn)行計(jì)算。

for (int i = 0; i < hex.length(); i++)

hex.length()是提供的十六進(jìn)制字符串中的字符數(shù)。我們對(duì)每個(gè)字符執(zhí)行一次 for 循環(huán)中的代碼。

char c = hex.charAt(i);

是的,char 代表單個(gè)字符。我們從索引 i 處的十六進(jìn)制字符串中檢索字符,因此在第一次迭代中它是第一個(gè)字符,在第二次迭代中是第二個(gè)字符,依此類推。

int d = digits.indexOf(c);

我們查看字符在 digit-String 中的索引。通過這種方式,我們確定了這個(gè)特定數(shù)字的十進(jìn)制表示。就像 0-9 保持 0-9 而 F 變成 15。

val = 16*val + d;

讓我們想想我們必須做什么。我們有數(shù)字的十進(jìn)制值。但是在十六進(jìn)制中,我們將這個(gè)數(shù)字放在一個(gè)特定的位置,它會(huì)與它相乘。就像'100'中的'1'實(shí)際上不是1,而是100 * 1,因?yàn)樗谶@個(gè)位置。十六進(jìn)制的10是十進(jìn)制的16,因?yàn)槲覀冇? * 16。現(xiàn)在這里的方法有點(diǎn)復(fù)雜。val 不是未初始化的。val 開始時(shí)為 0,然后包含來自先前迭代的累積值。由于 String 中的第一個(gè)字符是最高位置我們不直接知道我們必須乘以什么,因?yàn)槲覀儾恢罃?shù)字有多少位(實(shí)際上我們知道,但這種方法沒有使用這個(gè)) . 所以我們只需將數(shù)字值添加到它。在連續(xù)迭代中,它將乘以 16 以將其放大到相應(yīng)的數(shù)字基值。讓我給你看一個(gè)例子:


25F作為十六進(jìn)制數(shù)?,F(xiàn)在第一次迭代取 2 并將其轉(zhuǎn)換為 2 并將其添加到 val。在16 * val0做出決議,從而不能有效地在第一時(shí)間。

下一次迭代將 2 與 16 相乘,并取 5(轉(zhuǎn)換為 5)并將其添加到 val。所以現(xiàn)在我們有了(我用數(shù)學(xué)方法把它分開,所以你理解它): 2 * 16 + 5

接下來我們得到十進(jìn)制 15 的 F。我們將 val 乘以 16 并加上 15。

我們得到2 * 256 + 5 * 16 + 16 (* 1),這實(shí)際上是您如何以數(shù)學(xué)方式計(jì)算此十六進(jìn)制值的十進(jìn)制值。

計(jì)算 val 的另一種可能性是:

val += Math.pow(16, hex.length() - i - 1) * d;


查看完整回答
反對(duì) 回復(fù) 2021-10-28
  • 1 回答
  • 0 關(guān)注
  • 149 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)