2010-11-15 6 views
3

Je suis en train de lire dans une valeur hexadécimale d'une zone de texte, puis le mettre dans un uint, c'est le code:chaîne conversion en uint

UInt32 x = Convert.ToUInt32(location_txtbox.ToString()); 

Pourquoi, je veux passer x à certains non géré code et l'en-tête de fonction nécessite un DWORD.

Je reçois une chaîne d'entrée qui n'était pas dans l'erreur de format correct? J'essaye d'entrer des valeurs telles que 0x7c ou 0x777 mais j'obtiens toujours des erreurs?

Merci.

Répondre

14

Utilisez cette overload of Convert.ToUInt32 vous permet de spécifier la base de la conversion. Cela devrait fonctionner avec ou sans "0x".

UInt32 x = Convert.ToUInt32(location_txtbox.Text, 16); 
+0

Merci, cela a fonctionné. – flavour404

3

En supposant que location_txtbox est un TextBox, vous pouvez utiliser .Text au lieu de .ToString().

Et je pense que vous devez passer 16 comme deuxième paramètre pour analyser hex: par exemple. Convert.UInt32 (X, 16)

Voir: http://msdn.microsoft.com/en-us/library/swz6z5ks.aspx

2

Convert.ToUInt32 appelle simplement UInt32.Parse(String). Si vous appelez le overload qui prend un paramètre NumberStyles, vous pouvez indiquer que votre valeur est hexadécimale. Le problème est, vous devrez couper le "0x" principal, car il n'est pas autorisé.

var hexNumber = "0x777".Substring(2); 
uint.Parse(hexNumber, System.Globalization.NumberStyles.HexNumber) 
2

A) Ne jamais utiliser convert sans l'emballer dans un try/catch, ou à moins que vous êtes sûr que ce que vous analysez avec succès sera analysé.

B) Utilisez uint.TryParse. En particulier, utilisez celui qui vous permet de spécifier le style de nombre. La référence est à http://msdn.microsoft.com/en-us/library/kadka85s.aspx

C) dans le style, il semble que vous aurez besoin NumberStyles.HexSpecifier

D) Utilisez la propriété Text, comme indiqué ci-dessus.

+0

Merci, oui je ne pouvais pas être plus d'accord. Ceci est juste une application de test pour moi et je sais exactement quelles valeurs sont transmises afin que je ne reçois pas d'erreurs; mais oui normalement j'enveloppe tout. – flavour404