一、 十进制数据转换为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进制数据即可。