一、 十進位資料轉換為N進位資料
十進位資料Value,可以用如下公式表示為N精緻的資料。
Value = Xn * Math.Pow(Item, n) + Xn-1 * Math.Pow(Item, n-1) + .. + X2 * Math.Pow(Item, 1) + X1 * Math.Pow(Itm, 0) ;
其中Xn的範圍為(0 <= Xn < Item),n的範圍為(n>=2);
有上,我們可以得到十進位資料轉換為Item進位的資料的演算法如下:
Loop
IF (value >= Item)
第i位置的數值 = value % Item;
value = value / Item;
End IF;
ELSE
第i位置的數值 = value;
END IF;
i++;
End Loop;
故十進位的資料轉換為N進位的資料,代碼實現如下(注意:Item不要超過16進位,除非你自己修改Func中的方法)
/// <summary>
/// 10進位轉為Item進位
/// </summary>
/// <param name="value"></param>
/// <param name="item"></param>
/// <returns></returns>
protected string Pares10ToItem(double value, double item)
{
double sub = 0;
double pos = 0;
double tmp = 0;
double i = 1;
string s = "";
do
{
if (value >= item)
{
pos = value % item; // i位置上的數值
value = value / item;
}
else
{
pos = value;
value = 0;
}
s = (this.Func((int)pos)) + s;
i++;
} while (value > 0);
return s;
}
/// <summary>
/// 擷取Item進位資料的各個位置上的數值
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
protected string Func(int s)
{
string result = "";
switch (s)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
{
result = s.ToString();
break;
}
case 10:
{
result = "A";
break;
}
case 11:
{
result = "B";
break;
}
case 12:
{
result = "C";
break;
}
case 13:
{
result = "D";
break;
}
case 14:
{
result = "E";
break;
}
case 15:
default:
{
result = "F";
break;
}
}
return result;
}
二、 N進位資料轉換為十進位資料
這個就太簡單了,利用迴圈遍曆Value各個位置的資料Xn,用Xn*Math(N, n-1)的累計求和。即可。
三、非十進位資料之間的轉換:
這個我們可以分兩步來做:第一步將Value_X轉換為十進位資料Velue_10;第二步將Value_10轉換為Value_N進位資料即可。