C# 如何将十六进制值解析为uint?

C# 如何将十六进制值解析为uint?,c#,C#,不起作用。我做错了什么?试试看 uint color; bool parsedhex = uint.TryParse(TextBox1.Text, out color); //where Text is of the form 0xFF0000 if(parsedhex) //... 或者 Convert.ToUInt32(hex, 16) //Using ToUInt32 not ToUInt64, as per OP comment 您可以使用重载的TryParse()将Nu

不起作用。我做错了什么?

试试看

uint color; 
bool parsedhex = uint.TryParse(TextBox1.Text, out color); 
//where Text is of the form 0xFF0000
if(parsedhex)
   //...
或者

Convert.ToUInt32(hex, 16)  //Using ToUInt32 not ToUInt64, as per OP comment

您可以使用重载的
TryParse()
将NumberStyle参数添加到
TryParse
调用中,该调用提供十六进制值的解析。使用
NumberStyles.HexNumber
可以将字符串作为十六进制数传递

注意
NumberStyles.HexNumber
的问题是它不支持解析带有前缀的值(即
0x
&H
#
),因此在解析值之前必须将其去掉

基本上你会这样做:

string hexNum = "0xFFFF";
string hexNumWithoutPrefix = hexNum.Substring(2);

uint i;
bool success = uint.TryParse(hexNumWithoutPrefix, System.Globalization.NumberStyles.HexNumber, null, out i);

有关如何使用NumberStyles枚举的示例,请参阅文档。

这里有一个try parse style函数:

uint color;
var hex = TextBox1.Text;

if (hex.StartsWith("0x", StringComparison.CurrentCultureIgnoreCase) ||
    hex.StartsWith("&H", StringComparison.CurrentCultureIgnoreCase)) 
{
    hex = hex.Substring(2);
}

bool parsedSuccessfully = uint.TryParse(hex, 
        NumberStyles.HexNumber, 
        CultureInfo.CurrentCulture, 
        out color);

请记住(尽管它可能不适用于此特定的整数转换)。。。如果输入不好,Convert.ToUInt32可能比UInt32.TryParse慢几个数量级,比如Convert.ToDouble vs Double.TryParse:另外,它转换的内容并不总是很清楚:正如@Triynko所说,这是一个错误的过程,因为它容易引发异常。uint.TryParse更可取,因为它返回一个指示成功或失败的布尔值,而不是引发异常。使用
Convert.ToUInt32
的这种方法将处理“0x”前缀作为输入的一部分。我个人认为这种行为是一个bug。如果标志AllowHexSpecifier实际上不允许任何十六进制说明符,他们到底为什么要调用它呢?请记住,至少有两种常见的十六进制说明符:0x和&hj必须找到另一种可能的表示形式:“#0000103c..”
    private static bool TryParseHex(string hex, out UInt32 result)
    {
        result = 0;

        if (hex == null)
        {
            return false;
        }

        try
        {
            result = Convert.ToUInt32(hex, 16);

            return true;
        }
        catch (Exception exception)
        {
            return false;
        }
    }