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

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

How to parse hex values into a uint?

1
2
3
4
5
uint color;
bool parsedhex = uint.TryParse(TextBox1.Text, out color);
//where Text is of the form 0xFF0000
if(parsedhex)
   //...

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


尝试

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

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

注意:NumberStyles.HexNumber的问题在于它不支持解析带有前缀的值(即0x&H#),因此您必须先将其剥离解析值。

基本上,您会这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
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);

有关如何使用NumberStyles枚举的示例,请参阅本文:http://msdn.microsoft.com/zh-cn/library/zf50za27.aspx


或者像

1
2
3
4
5
string hexNum ="0xFFFF";
string hexNumWithoutPrefix = hexNum.Substring(2);

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

这是一个try-parse样式函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    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;
        }
    }

推荐阅读