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

本文介绍了一个支持2到36进制之间任意转换的类库,不仅包含常用的二进制、八进制、十进制和十六进制转换,还支持自定义转换。通过内置转换器和自定义转化器,开发者可以轻松实现各种进制之间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


介绍

此类库支持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;
            }


C语言中的进制转换器通常用于将数字从一种进制表示形式(如十进制、二进制、八进制或十六进制等)转换成另一种形式。这种功能常见于程序设计、调试及嵌入式系统开发等领域。 以下是通过几个简单示例展示如何在C语言中实现基本的进制转换: ### 示例一:十进制转二进制 ```c #include <stdio.h> void decimalToBinary(int n) { int binaryNum[32]; int i = 0; while (n > 0) { binaryNum[i] = n % 2; // 取余得到当前位数上的值 n /= 2; // 整除,向下取整到下一位 i++; } printf("其对应的二进制为: "); for (int j = i - 1; j >= 0; j--) // 输出数组内容即得结果 printf("%d",binaryNum[j]); } int main() { int num; printf("请输入一个十进制整数: "); scanf("%d",&num); decimalToBinary(num); // 调用函数完成转换 return 0; } ``` 此段代码接受用户输入的一个十进制整数,并将其转化为二进制字符串显示出来。 ### 示例二:任意进制互换(简化版) 我们可以编写更复杂的版本支持所有基础型的相互转化,这里仅提供简化的思路框架: ```c // 假设已知源数据及其原始基数与目标基数... char* convertBase(char number[], int fromBase, int toBase){ // 算法省略... 包含多次循环计算处理各位置数值权重加总等等步骤 } /* 用户交互部分 */ printf("选择要变换的数据以及它们的基础和目的...\n"); scanf(...); /* 获取相关信息 */ result = convertBase(originalNumberString, originalBaseValue, targetBaseValue); puts(result); free(result); // 如果动态分配了内存别忘了释放资源哦! ``` 以上例子展示了利用C语言进行简单的进制转换操作的基本方法论。当然实际应用当中还需要考虑许多边界条件比如负数的支持情况、小数点后的精度保留等问题,所以这只是一个初步入门级的概念演示罢了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值