任意进制转换(转化器,算法,类)


介绍

此类库支持2(二进制)到36之间任意进制的转换。

类库提供了一些常见的转换(如二进制到十进制),也支持高级的转换(如20进制到5进制)

快速使用:内置转换器

  • Convert.BinToDec.Convert()
  • Convert.BinToHex.Convert()
  • Convert.BinToOct.Convert()
  • Convert.DecToBin.Convert()
  • Convert.DecToHex.Convert()
允许所有的转换组合使用二进制、八进制、十进制和十六进制。例如:

//将 FFF(hex)转化为二进制
string binary = Converter.HexToBin.Convert("FFFF");

高级功能:自定义转化器

除了内置的静态转换器,您还可以自定义转换。例如:

// 将 FFFF (hex) 转化为5:
string base5 = Converter.Convert(NumberBases.Hexadecimal, 5, "FFFF");

主要代码:

    /// <summary>
    /// 常见的进制转换
    /// </summary>
    public enum NumberBases
    {
        Binary = 2,//二进制
        Octal = 8,//八进制
        Decimal = 10,//十进制
        Hexadecimal = 16//十六进制
    }

        /// <summary>
        /// 返回用于在指定的编号方案中使用的字符
        /// </summary>
        /// <param name="scheme"></param>
        /// <returns></returns>
        private static string  GetCharactersForNumberingScheme(NumberingSchemes scheme)
        {
            string characters;

            switch(scheme)
            {
                case NumberingSchemes.AToZ:
                    characters = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                    break;

                case NumberingSchemes.ZeroToZ:
                    characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                    break;

                default:
                    throw new ArgumentOutOfRangeException("scheme");
            }

            return characters;
        }

        /// <summary>
        /// 将指定的数转化为10进制
        /// </summary>
        /// <param name="value"></param>
        /// <param name="fromBase"></param>
        /// <param name="characters"></param>
        /// <param name="maxFromSchemeCharacter"></param>
        /// <returns></returns>
        private static long ConvertToBase10(string value,int fromBase,string characters,int maxFromSchemeCharacter)
        {
            StringBuilder fromValue = new StringBuilder(value);

            int power = 0;
            long result = 0;

            while(fromValue.Length>0)
            {
                int index = Array.IndexOf<char>(characters.ToCharArray(), fromValue[fromValue.Length - 1]);

                if (index < 0)
                    throw new FormatException("Unsupported character in value string");

                if (index >= maxFromSchemeCharacter)
                    throw new FormatException("Value contains character not valid for number base");

                result += (index * (long)Math.Pow(fromBase, power));

                //溢出检查
                if (result < 0)
                    throw new OverflowException();

                fromValue.Length--;

                power++;
            }
            return result;
        }

        /// <summary>
        /// 将指定的字符从10进制转化为指定的进制
        /// </summary>
        /// <param name="value"></param>
        /// <param name="toBase"></param>
        /// <param name="characters"></param>
        /// <returns></returns>
        private static string ConvertFromBase10(long value,int toBase,string characters)
        {
            StringBuilder builer = new StringBuilder();

            while(value>0)
            {
                int remainder = (int)(value % toBase);

                builer.Insert(0, characters[remainder]);

                value /= toBase;
            }

            return builer.ToString();
        }

完整代码下载:

点击打开链接

DEMO:

            try
            {
                int fromBase = int.Parse(DropDownList1.SelectedValue);
                int toBase = int.Parse(DropDownList2.SelectedValue);

                TextBox3.Text = Converter.Convert(fromBase, toBase, TextBox2.Text);
            }
            catch (Exception ex)
            {
                TextBox3.Text = ex.Message;
            }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值