Quelle est la bonne façon de convertir un char
a int
? Cela donne 49
:
int val = Convert.ToInt32('1');
//int val = Int32.Parse("1"); // Works
Je ne veux pas convertir en chaîne et ensuite l'analyser.
Quelle est la bonne façon de convertir un char
a int
? Cela donne 49
:
int val = Convert.ToInt32('1');
//int val = Int32.Parse("1"); // Works
Je ne veux pas convertir en chaîne et ensuite l'analyser.
Je suis d'accord, je n'arrive pas à comprendre pourquoi il renvoie 'double' - comment un seul caractère peut-il représenter un nombre à virgule flottante ?
Il existe de nombreux caractères Unicode qui représentent effectivement un nombre non entier, par exemple, U+2153 .
Et si (pour char c
)
int i = (int)(c - '0');
qui effectue la soustraction de la valeur du caractère ?
Concernant la question de l'API (commentaires), peut-être une méthode d'extension ?
public static class CharExtensions {
public static int ParseInt32(this char value) {
int i = (int)(value - '0');
if (i < 0 || i > 9) throw new ArgumentOutOfRangeException("value");
return i;
}
}
puis utiliser int x = c.ParseInt32();
J'aurais dû préciser que je connaissais cette possibilité, mais existe-t-il un autre moyen ? Je voulais savoir s'il existe une API pour faire cela ?
Si vous voulez un comportement similaire à celui de int.Parse
Si l'on veut qu'une exception soit levée en cas d'entrée non valide, il faut ajouter une vérification supplémentaire des limites : if (i < 0 || i > 9) throw new FormatException();
Ce que tout le monde oublie, c'est d'expliquer POURQUOI cela se produit.
Un Char, c'est en fait un entier, mais avec un pointeur dans la table ASCII. Tous les caractères ont une valeur entière correspondante, comme vous pouvez le voir clairement en essayant de les analyser.
Pranay a clairement un jeu de caractères différent, c'est pourquoi SON code ne fonctionne pas. la seule solution est
int val = '1' - '0';
parce que cela recherche la valeur entière dans la table de '0'
qui est alors la "valeur de base". en soustrayant votre nombre au format char de celui-ci, vous obtiendrez le nombre original.
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.
1 votes
Duplicata possible de este question.
0 votes
Duplicata possible de Convertir un char en int en C#