Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 试图在c中将dec转换为十六进制,但每次我尝试这段代码都失败了,为什么?_C# - Fatal编程技术网

C# 试图在c中将dec转换为十六进制,但每次我尝试这段代码都失败了,为什么?

C# 试图在c中将dec转换为十六进制,但每次我尝试这段代码都失败了,为什么?,c#,C#,这是我得到的密码。 我正试图修复它,但我找不到我的代码有什么问题。 代码开始失效的点在if内, 我做错什么了吗 class Program { static void Main(string[] args) { double division; double chosenNumber; int intDivision; int remainder = 1; int fullNumber = 0;

这是我得到的密码。 我正试图修复它,但我找不到我的代码有什么问题。 代码开始失效的点在if内, 我做错什么了吗

class Program
{
    static void Main(string[] args)
    {
        double division;
        double chosenNumber;
        int intDivision;
        int remainder = 1;
        int fullNumber = 0;
        int numberOfTimes = 0;

        Console.WriteLine("Choose a number");
         chosenNumber = int.Parse(Console.ReadLine());


        do
        {
            division = chosenNumber / 16;
            intDivision = Convert.ToInt32(chosenNumber) / 16;
            remainder = Convert.ToInt32((division - intDivision) * 16);
            if (numberOfTimes != 0)
            {
                fullNumber = numberOfTimes ^ 10 * remainder + fullNumber;
            }
            else
            {
                fullNumber = remainder;
            }
            numberOfTimes++;
            chosenNumber = intDivision; 
        } while (remainder > 0);

        Console.WriteLine(fullNumber);
    }

我对你已经拥有的东西有一些自由,不,我不能说它有什么问题,但这似乎有点好。我希望有帮助

static void Main(string[] args)
{
    Console.WriteLine("Choose a number");
    int chosenNumber = Convert.ToInt32(Console.ReadLine());
    int remainder;
    string result = string.Empty;
    while (chosenNumber > 0)
    {
        remainder = chosenNumber % 16;
        chosenNumber /= 16;
        result = remainder.ToString() + result;
    }

    Console.WriteLine(result);
    Console.Read();
}
这将是我的解决方案(基本上与Eva相同,但具有“内置”输入处理)

int chiffre=0;
int-rem=0;
字符串val=”“;
Console.WriteLine(“选择一个数字”);
if(int.TryParse(Console.ReadLine(),out chiffre))
{
while(chiffre!=0)
{
rem=chiffre%16;
如果(rem<10)
rem+=48;//0的ascii键
其他的
rem+=55;
chiffre/=16;
val=(char)rem+val;
}
}
控制台写入线(val);
}
fullNumber=numberOfTimes^10*余数+fullNumber;
^10
应该是位异或吗?否则,您可能会将
^
Math.Pow(x,y)
混淆,这反过来会导致函数中的未定义行为


在任何情况下,我建议您使用Eva或我的解决方案,因为这是编写此类函数的更惯用版本(也适用于任何基)。

您所说的“失败”是什么意思。有例外吗?哪个?此外,还有用于解析十六进制数字的内置函数(例如int.Parse with NumberStyles.allowehexspecifier);不需要重新发明轮子。如果你能提供至少7个输入,以及这7个输入中的每一个的预期结果,那就太棒了。另外,请解释为什么25个输入得到16个。看着我,我有点困惑,为什么这是预期的结果。它的可能重复可能有助于思考“十六进制”的真正含义。这是一种以16为基数编码数字的方法,使用字符a..F表示0..9以外的数字。在C#中,只有两种实用的数据类型可以存储这样的数字,它们是char[]和string。使用double只能产生无意义的结果,它在显示时使用机罩下的底座2和底座10。将fullNumber改为string以获得成功。这很有效,我想知道将来会发生什么问题。
    int chiffre = 0;
    int rem = 0;
    string val = "";
    Console.WriteLine("Choose a number");
    if(int.TryParse(Console.ReadLine(), out chiffre))
    {
        while (chiffre != 0)
        {
            rem = chiffre % 16;

            if (rem < 10)
                rem += 48; // ascii key for 0
            else
                rem += 55;
            chiffre /= 16;
            val = (char)rem + val;
        }
    }
    Console.WriteLine(val);
}

            fullNumber = numberOfTimes ^ 10 * remainder + fullNumber;