十六进制转二进制

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using java.math;

namespace BiggerIngeger
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("test1:------------------------------------");
            Console.WriteLine("十六进制:ABCDEF");
            Console.WriteLine("十进制:" + convert16To10("ABCDEF") + "\n");
            Console.WriteLine("test2:------------------------------------");
            Console.WriteLine("十六进制:1234567890");
            Console.WriteLine("十进制:" + convert16To10("1234567890") + "\n");
            Console.WriteLine("test3:------------------------------------");
            Console.WriteLine("十六进制:abcdef");
            Console.WriteLine("十进制:" + convert16To10("abcdef") + "\n");
            Console.WriteLine("test4:------------------------------------");
            Console.WriteLine("十六进制:ABCdef12f90");
            Console.WriteLine("十进制:" + convert16To10("ABCdef12f90") + "\n");
            Console.WriteLine("test5:------------------------------------");
            Console.WriteLine("十六进制:12e5f6b59dd2261ec7d50ccbd32d6bf");
            Console.WriteLine("十进制:" + convert16To10("12e5f6b59dd2261ec7d50ccbd32d6bf") + "\n");

            Console.ReadLine();
        }

        public static BigInteger convert16To10(string number_16)
        {
            BigInteger result = new BigInteger("0");     //用于存放最终结果
            char[] position = number_16.ToCharArray();   //将十六进制串转换成字符数组

            for (int i = 0; i < position.Length; i++)    //position[i]表示从左边开始的第i位上的十六进制的数值
            {
                BigInteger temp_result_value = new BigInteger("0");  //用于存放positio[i]位置上的的结果值
                BigInteger position_value;    //从左边开始的第i位上的十六进制的数值

                if (position[i] == 'a' || position[i] == 'A') 
                {
                    position_value = new BigInteger("10");
                } else if (position[i] == 'b' || position[i] == 'B')
                {
                    position_value = new BigInteger("11");
                }
                else if (position[i] == 'c' || position[i] == 'C')
                {
                    position_value = new BigInteger("12");
                }
                else if (position[i] == 'd' || position[i] == 'D')
                {
                    position_value = new BigInteger("13");
                }
                else if (position[i] == 'e' || position[i] == 'E')
                {
                    position_value = new BigInteger("14");
                }
                else if (position[i] == 'f' || position[i] == 'F')
                {
                    position_value = new BigInteger("15");
                }
                else 
                {
                    position_value = new BigInteger(position[i].ToString());
                }

                BigInteger value_16 = new BigInteger("16");   //存储一个数值,相当于int value_16 = 16
                if (position.Length - 1 - i > 0)     //如果不是最后的一位,刚进行求16的position.Length - 2 - i次方的十进制值
                {
                    temp_result_value = value_16;
                    for (int j = 0; j < position.Length - 2 - i; j++)
                    {
                        temp_result_value = temp_result_value.multiply(value_16);
                    }
                    temp_result_value = temp_result_value.multiply(position_value);
                }
                else if (position.Length - 1 - i == 0)   //如果是最后的一位,直接加上最后一面的数值
                {
                    temp_result_value = temp_result_value.add(position_value);
                }

                result = result.add(temp_result_value);   //将十六进制的第i位的十进制值加到最终结果result中

            }
            return result;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值