如何在C#中手动将十六进制转换为十进制?

时间:2015-07-03 17:48:18

标签: c# command-line hex decimal

因此我们被要求将十六进制值(存储在字符串中)转换为十进制值。字符串中的每个字符都应在循环内手动转换为十进制,然后发布十六进制值的总十进制值。我在这里找到了我写的代码,但我无法确定我可能出错的地方#34; F4" Hexa(作为例子)具有十进制等效值" 292"而不是" 244"。我调试了一切,代码似乎很好。有什么想法吗?

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

namespace AdvProgCS
{
    class Program
    {
        static int dec=0;
        static string hex;
        static void Main(string[] args)
        {
            do{
                Console.Write("[Press 0 to Stop] Hexadecimal Value: ");

                hex = Console.ReadLine();
                if (hex == "0") break;
                int length = hex.Length;
                for (int i = 0; i < length+1; i++)
                {

                    if (hex[i] == 'A' || hex[i] == 'B' || hex[i] == 'C' || hex[i] == 'D' || hex[i] == 'E' || hex[i] == 'F')
                    {
                        if (hex[i] == 'A')
                            dec+= 10 * Convert.ToInt32(Math.Pow(16, length - 1));
                        if (hex[i] == 'B')
                            dec += 11 * Convert.ToInt32(Math.Pow(16, length - 1));
                        if (hex[i] == 'C')
                            dec += 12 * Convert.ToInt32(Math.Pow(16, length - 1));
                        if (hex[i] == 'D')
                            dec += 13 * Convert.ToInt32(Math.Pow(16, length - 1));
                        if (hex[i] == 'E')
                            dec += 14 * Convert.ToInt32(Math.Pow(16, length - 1));
                        if (hex[i] == 'F')
                            dec += 15 * (Convert.ToInt32(Math.Pow(16, length - 1)));
                    }
                    else
                        dec += hex[i];
                    length--;
                }
                Console.WriteLine("DECIMAL EQUIVALENT: " + dec + "\n");
            }
            while(hex != "0");

        }
    }
}

2 个答案:

答案 0 :(得分:1)

您忘记了Math.Pow行中的dec += hex[i],您还需要将hex[i]从char转换为数字。

dec += (int)char.GetNumericValue(hex[i]) * (int)Math.Pow(16, length - 1);

此外,正如Partha所说:

  

同时加上dec = 0;在您的打印声明之后。我认为dec值   正在为每次迭代添加自己。

答案 1 :(得分:0)

就个人而言,我的大脑更喜欢这样:

<rule id="_1" scope="private">