it-swarm.com.de

Wie kann ich hexadezimale Werte in eine Uint umwandeln?

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?

67

Versuchen

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

Sie können eine überladene TryParse() verwenden, die dem TryParse -Aufruf einen NumberStyle-Parameter hinzufügt, der das Parsen von Hexadezimalwerten ermöglicht. Verwenden NumberStyles.HexNumber, mit dem Sie die Zeichenfolge als Hex-Zahl übergeben können.

Hinweis : Das Problem mit NumberStyles.HexNumber ist, dass es nicht das Parsen von Werten mit einem Präfix unterstützt (dh. 0x, &H, oder #), also müssen Sie es entfernen, 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-Enumeration: http://msdn.Microsoft.com/en-us/library/zf50za27.aspx

44
Jeremy Wiebe

Oder wie

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

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

Hier ist eine Try-Parse-Style-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;
        }
    }
4
Curtis Yallop