因此我们被要求将十六进制值(存储在字符串中)转换为十进制值。字符串中的每个字符都应在循环内手动转换为十进制,然后发布十六进制值的总十进制值。我在这里找到了我写的代码,但我无法确定我可能出错的地方#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");
}
}
}
答案 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">