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;
}
}
}
十六进制转二进制
最新推荐文章于 2023-07-16 20:35:23 发布