• 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进制数据即可。

  • 相关阅读:
    【MyBatis】Inappropriate OGNL expression
    【java】前补零
    【js】前补零
    【Java】导出excel.xlsx
    【插件】fileinput
    【前端】WebSocket is already in CLOSING or CLOSED state?
    【HTML】input标签添加提示内容
    学习问题记录 -- 对象和引用
    八数码难题
    Java 逻辑运算符 & 与 &&的区别
  • 原文地址:https://www.cnblogs.com/itshare/p/2153860.html
Copyright © 2020-2023  润新知