C#中各个进制数据之间的相互转换

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

原文地址:https://www.cnblogs.com/itshare/p/2153860.html