[C#] N進制轉換一次搞定

n進制轉換使用 Convert.ToString(num, n)

但只支援2、8、16進制不夠用嗎? 來看看這篇吧~

 

網路上其實已有不少前輩寫好多種進制轉換的文章,但萬用的N進制卻相對少一些...

一般來說,大多會用到的是2、8、10、16進制,那以16進制來說,單一位數最大值是F,那F之後呢?

萬一我想要到Z(36進制)怎麼辦? 或是我想要9進制或3進制怎麼辦?

 

不廢話,無擾人的30秒廣告,直接切入業配主題!!!!

public void Calc()
{
    try
    {
        int iVal = int.Parse("0" + tbxVal.Text);    //原始值
        int iSys = int.Parse("0" + tbxSystem.Text); //進制

        //計算
        if (iSys > 1)
            tbxAns.Text = nNum(iVal, iSys); //進入點
        else
            tbxAns.Text = "Err";
    }
    catch
    {
        tbxAns.Text = "Err";
    }
}

public string nNum(int value, int n)
{
    //對應表
    string[] nText = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
                       "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
                       "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
                       "U", "V", "W", "X", "Y", "Z"};

    if (value != 0)
    {
        return nNum(value / n, n) + nText[value % n]; //繼續遞迴計算&組裝
    }

    return ""; //結束點
}

這方法說起來也滿直接的…

一開始就先定義好對應表...當然也可以打亂它,不一定要照順序…

 

然後再用遞迴的方式,一個位數一個位數的做計算

先算個位數(value%n),再算十位數(nNum(value/n,n)),再往後算百位數、千位數.....

直到商數為0,才返回"",做為結束點。

 Written By Felix Hsieh