Cómo analizar los valores hexadecimales en un uint?

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

no funciona ¿Qué estoy haciendo mal?

Tratar

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

Puede utilizar un TryParse() sobrecargado que agrega un parámetro NumberStyle a la llamada TryParse que proporciona el análisis de valores hexadecimales. Use NumberStyles.HexNumber que le permite pasar la cadena como un número hexadecimal.

Nota : El problema con NumberStyles.HexNumber es que no admite el análisis de valores con un prefijo (es decir, 0x , &H o # ), por lo que debe quitarlo antes de intentar analizar el valor.

Básicamente harías esto:

 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); 

Consulte este artículo para ver un ejemplo de cómo usar la enumeración NumberStyles: http://msdn.microsoft.com/en-us/library/zf50za27.aspx

O como

 string hexNum = "0xFFFF"; string hexNumWithoutPrefix = hexNum.Substring(2); uint i; bool success = uint.TryParse(hexNumWithoutPrefix, System.Globalization.NumberStyles.HexNumber, null, out i); 

Aquí hay una función de estilo try-parse:

  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; } }