uint color;
bool parsedhex = uint.TryParse(TextBox1.Text, out color);
//where Text is of the form 0xFF0000
if(parsedhex)
//...
funktioniert nicht Was mache ich falsch?
Versuchen
Convert.ToUInt32(hex, 16) //Using ToUInt32 not ToUInt64, as per OP comment
Convert.ToUInt32
wird das Präfix '0x' als Teil der Eingabe behandelt.Sie können eine Überladung verwenden,
TryParse()
die demTryParse
Aufruf einen NumberStyle-Parameter hinzufügt, der das Parsen von Hexadezimalwerten ermöglicht. Verwenden SieNumberStyles.HexNumber
diese Option, um die Zeichenfolge als Hex-Zahl zu übergeben.Hinweis : Das Problem mit
NumberStyles.HexNumber
ist , dass es nicht funktioniert unterstützen Werte mit einem Präfix Parsing (dh.0x
,&H
Oder#
, so haben Sie es abzustreifen , bevor Sie versuchen , den Wert zu analysieren).Grundsätzlich würden Sie dies tun:
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);
In diesem Artikel finden Sie ein Beispiel für die Verwendung der NumberStyles-Aufzählung: http://msdn.microsoft.com/en-us/library/zf50za27.aspx
quelle
Oder wie
string hexNum = "0xFFFF"; string hexNumWithoutPrefix = hexNum.Substring(2); uint i; bool success = uint.TryParse(hexNumWithoutPrefix, System.Globalization.NumberStyles.HexNumber, null, out i);
quelle
Hier ist eine Try-Parse-Funktion:
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; } }
quelle