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?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?Comment analyser les valeurs hexadécimales dans un Uint?
Essayez
Convert.ToUInt32(hex, 16) //Using ToUInt32 not ToUInt64, as per OP comment
Quelque chose à garder à l'esprit (bien que cela ne s'applique pas à cette conversion d'entier) ... si l'entrée est mauvaise, Convert.ToUInt32 pourrait être plus lent que UInt32.TryParse, comme Convert.ToDouble vs Double.TryParse: http://stackoverflow.com/questions/586436/double-tryparse-or-double-convert-what-is-faster-and-more-safe/586539#586539 Aussi, il n'est pas toujours clair ce qu'il convertit: http://stackoverflow.com/questions/586436/double-tryparse-or-double-convert-what-is-faster-and-more-safe/586460#586460 – Triynko
Comme l'a dit @Triynko, il s'agit d'un processus défectueux, car il est responsable jeter des exceptions. uint.TryParse serait préférable, car il renvoie une valeur booléenne indiquant le succès ou l'échec, plutôt que de lancer une exception. – Zenexer
Cette approche avec 'Convert.ToUInt32' gèrera le préfixe '0x' comme partie de l'entrée. –
Ou comme
string hexNum = "0xFFFF";
string hexNumWithoutPrefix = hexNum.Substring(2);
uint i;
bool success = uint.TryParse(hexNumWithoutPrefix, System.Globalization.NumberStyles.HexNumber, null, out i);
Vous pouvez utiliser un TryParse()
surchargé qui ajoute un paramètre NumberStyle à l'appel TryParse
qui fournit l'analyse des valeurs hexadécimaux. Utilisez NumberStyles.HexNumber
qui vous permet de passer la chaîne comme un nombre hexadécimal.
Remarque: Le problème avec NumberStyles.HexNumber
est qu'il ne pas les valeurs d'analyse syntaxique de support avec un préfixe (c.-à-0x
, &H
ou #
.), Donc vous devez dépouiller avant de tenter d'analyser la valeur .
Fondamentalement, vous feriez ceci:
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);
Voir cet article pour un exemple de la façon d'utiliser l'énumération NumberStyles: http://msdn.microsoft.com/en-us/library/zf50za27.aspx
-1 ne fonctionne pas: voir l'exemple de MSDN auquel vous associez yo! "La tentative de conversion de '0x80C1' a échoué." – peenut
Vous avez raison! Pour analyser un nombre hexadécimal comme "0x80C1", vous devez supprimer la partie "0x". J'ai mis à jour mon exemple de code de manière appropriée. Merci. –
-1 supprimé: vous avez mis à jour le commentaire – peenut
est ici 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;
}
}
quelle langue est-ce? Que diriez-vous d'un tag pour la langue? –
Il semble puissant comme C#, et la seule réponse à ce jour l'a traité ainsi, mais oui, une étiquette aurait été une très bonne idée. –