80 votes

Comment analyser les valeurs hexadécimales dans un uint?

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

ne fonctionne pas. Qu'est-ce que je fais mal?

126voto

Nescio Points 12613

Essayer

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

50voto

Jeremy Wiebe Points 2577

Vous pouvez utiliser une surcharge TryParse() qui ajoute une NumberStyle paramètre à la TryParse appel qui fournit l'analyse de valeurs Hexadécimales. Utilisation NumberStyles.HexNumber qui vous permet de passer la chaîne d'un nombre hexadécimal. Le problème avec NumberStyles.HexNumber est qu'il ne prend pas en charge le " 0x " préfixe, de sorte que vous devez bande de hors tension avant d'essayer d'analyser la valeur.

Fondamentalement, vous feriez ceci:

uint color;

var hex = TextBox1.Text;
if (hex.StartsWith("0x", StringComparison.CurrentCultureIgnoreCase)) 
{
    hex = hex.Substring(2);
}

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

Voir cet article pour un exemple d'utilisation de l'énumération NumberStyles: http://msdn.microsoft.com/en-us/library/zf50za27.aspx

16voto

Corey Ross Points 1096

Ou comme

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

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

6voto

Curtis Yallop Points 639

Voici une fonction de style 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;
        }
    }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X