C# C中从十六进制到int的转换不正确#

C# C中从十六进制到int的转换不正确#,c#,int,hex,C#,Int,Hex,问题的原因是什么?我的方法返回不正确的int值。当我给它十六进制值AB或DC或类似的值时,它返回int=0,但当我给它十六进制值22时,它返回int=22。(尽管在这种情况下int应该是34) 我尝试使用Number=Convert.ToInt32(GetX(Xx,Rr));但它给出了相同的结果,但对于包含字母的任何内容,都是null而不是0。使用Convert.ToInt32(string,int)。这样你就可以给一个基数,这个数字应该用它来解释。例如 return Convert.ToInt

问题的原因是什么?我的方法返回不正确的int值。当我给它十六进制值AB或DC或类似的值时,它返回int=0,但当我给它十六进制值22时,它返回int=22。(尽管在这种情况下int应该是34)

我尝试使用Number=Convert.ToInt32(GetX(Xx,Rr));但它给出了相同的结果,但对于包含字母的任何内容,都是null而不是0。

使用
Convert.ToInt32(string,int)
。这样你就可以给一个基数,这个数字应该用它来解释。例如

return Convert.ToInt32(GetX(Xx, Rr), 16);
(您也不会检查
TryParse
的返回值,这将提示解析失败。)

如果需要十进制和十六进制数字,则需要根据数字的外观进行分支,并使用以10为基数或以16为基数。例如,如果您的十六进制数字总是以
0x
开头,您可以使用以下内容:

string temp = GetX(Xx, Rr);
return Convert.ToInt32(temp, temp.StartsWith("0x") ? 16 : 10);

但这将取决于你如何(如果有的话)区分这两者。当然,如果一切都是十六进制,那么就没有这种必要。

int.TryParse
解析以10为基数的整数


使用
Convert.ToUInt32(十六进制,16)
代替使用
numberstyle.HexNumber

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        string text = "22";
        int value;
        int.TryParse(text, NumberStyles.HexNumber, 
                     CultureInfo.InvariantCulture, out value);
        Console.WriteLine(value); // Prints 34
    }
}
顺便问一下,如果无法解析该值,是否确实要以静默方式返回0?如果没有,请使用返回值
int.TryParse
确定解析是否成功。(这就是它在原始代码中为“AB”返回0的原因。)

这是我的解决方案

kTemp = int.Parse(xcc, System.Globalization.NumberStyles.HexNumber);
上面的kTemp是一个整数,xcc是一个字符串。 xcc可以是任何类似的东西;FE,10BA,FE0912。。。就是说,;xcc是任意长度的十六进制字符字符串。
当心;我的十六进制字符串没有得到0x前缀。

什么是
GetX
?int.Parse/int.TryParse只理解base10,而不理解base16。罗兰:我猜它会返回一个字符串。但我想说这在这里也不太重要。可爱,我不知道那件事。这里是否有一种方法优于另一种方法(除了关于不可解析输入的语义,这显然取决于需要什么)?@Joey:我个人更喜欢使用
TryParse
,因为它提供了更多的控制。
if(!int.TryParse(“22”,NumberStyles.HexNumber,CultureInfo.InvariantCulture,out int HexNumber))返回0名为hexNumber的int现在可以使用了,当使用out int而不是out时,它很小而且很致命。out int创建变量并输出到它,而out引用一个int并输出到它。@MaDude:是的,我非常了解C#7中的
out
参数支持,但我不会把我所有5年以上的帖子都翻一遍来编辑它们…@JonSkeet向其他来到这里的用户指出,m8,使用Convert.ToInt32冷静下来,你不能处理失败(只是作为不干净的例外)。这就是为什么特里帕斯更好。
kTemp = int.Parse(xcc, System.Globalization.NumberStyles.HexNumber);