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