Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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#_Winforms_Visual Studio_Hex_Decimal - Fatal编程技术网

C# 在负十六进制和负十进制之间转换会产生错误的结果

C# 在负十六进制和负十进制之间转换会产生错误的结果,c#,winforms,visual-studio,hex,decimal,C#,Winforms,Visual Studio,Hex,Decimal,我正在尝试在十进制和十六进制之间手动转换数字。我让它处理正数,并将负十进制转换为负十六进制,但我不能将它从负十六进制转换为负十进制 以下是我尝试使用的代码: private string HexToDecimal(char[] toConvert) { if (negativeValue) { negativeValue = false; long var = Convert.ToInt64(HexToDe

我正在尝试在十进制和十六进制之间手动转换数字。我让它处理正数,并将负十进制转换为负十六进制,但我不能将它从负十六进制转换为负十进制

以下是我尝试使用的代码:

private string HexToDecimal(char[] toConvert)
    {
        if (negativeValue)
        {
            negativeValue = false;

            long var = Convert.ToInt64(HexToDecimal(ResultLabel.Text.ToCharArray()));

            long valueToHex = var - (long)Math.Pow(16, 15);

            return ResultLabel.Text = valueToHex.ToString();
        }
        else
        {
            double total = 0;
            //Convert hex to decimal

            HexOrDecimalLabel.Text = "Decimal";

            //TODO: create int array from indivial int
            char[] charArray = toConvert;
            long[] numberArray = HexSwitchFunction(charArray);

            //TODO: reverse array
            Array.Reverse(numberArray);

            //loop array, times value by 16^i++, adding to total. This is the method   used to convert hex to decimal
            double power = 0;
            foreach (int i in numberArray)
            {
                total += (i * (Math.Pow(16, power)));
                power++;
            }

            //set the result label to total

            isHex = false;
            AllowHexButtons();

            return ResultLabel.Text = total.ToString();
        }
    }
例如,我可以将-10转换为FFFFFFFFFFFFFFF6,但当我尝试将其转换为十进制时,我得到了1.15292150460685E+18,我不能用它做任何等式


有人知道解决这个问题的方法吗?

这是因为
double
对负数使用了不同的表示法。将
total
power
的类型从
double
更改为
long
可以解决问题。

不应该使用“var”这样的变量名称,它是一个保留关键字。您是否尝试将
total
power
的类型更改为
long
?请查看以下两篇帖子:,@bnem我知道我不应该那样做,我只是尝试了很多东西,所以我不太在意名字。一旦我发现了一些有用的东西,我会回去修复这些东西。@dasblinkenlight,谢谢!这非常有效。我不敢相信我忽略了这么小的事情。