J'ai un caractère en c #:
char foo = '2';
Maintenant, je veux mettre le 2 dans un int. Je trouve que Convert.ToInt32 renvoie la valeur décimale réelle du caractère et non le nombre 2. Ce qui suit fonctionnera:
int bar = Convert.ToInt32(new string(foo, 1));
int.parse ne fonctionne également que sur les chaînes.
N'y a-t-il pas de fonction native en C # pour passer d'un caractère à un entier sans en faire une chaîne? Je sais que c'est trivial, mais il semble juste étrange qu'il n'y ait rien de natif pour effectuer directement la conversion.
char.GetNumericValue('¼')
donne 0,25. The joys of Unicode ... ;-)char
àint
sans utiliser d'string
abord.Cela le convertira en un entier:
Cela fonctionne car chaque caractère est représenté en interne par un nombre. Les caractères «0» à «9» sont représentés par des nombres consécutifs, donc trouver la différence entre les caractères «0» et «2» donne le chiffre 2.
la source
char
est toujours UTF-16.Quelqu'un a-t-il envisagé d'utiliser
int.Parse()
etint.TryParse()
aimerEncore mieux comme ça
C'est beaucoup plus sûr et moins sujet aux erreurs
la source
'0'
du caractère.et vous pouvez en créer une méthode statique:
la source
Essaye ça
la source
'9'
, mais votre code l'a9
, qui ne se compilera pas.Par défaut, vous utilisez UNICODE donc je suggère d'utiliser la méthode de faulty
int bar = int.Parse(foo.ToString());
Même si les valeurs numériques ci-dessous sont les mêmes pour les chiffres et les caractères latins de base.
la source
Cela convertit en un entier et gère unicode
CharUnicodeInfo.GetDecimalDigitValue('2')
Vous pouvez en savoir plus ici .
la source
Le vrai moyen est:
"theNameOfYourInt" - le entier vers lequel vous voulez que votre caractère soit transformé.
"theNameOfYourChar" - Le caractère que vous souhaitez utiliser pour qu'il soit transformé en un int.
Laissez tout le reste être.
la source
Principe:
Le binaire des caractères ASCII 0-9 est:
et si vous prenez dans chacun d'eux les 4 premiers LSB (en utilisant ET au niveau du bit avec 8'b00001111 qui équivaut à 15), vous obtenez le nombre réel (0000 = 0,0001 = 1,0010 = 2, ...)
Usage:
la source
Je suis d'accord avec @Chad Grant
Aussi bien si vous convertissez en chaîne, vous pouvez utiliser cette valeur comme numérique, comme indiqué dans la question
J'ai essayé de créer un exemple plus simple et compréhensible
char.GetNumericValue (v) renvoie comme double et se convertit en (int)
Utilisation plus avancée en tant que tableau
la source
Comparaison de certaines des méthodes basées sur le résultat lorsque le caractère n'est pas un chiffre ASCII:
la source
J'utilise Compact Framework 3.5 et je n'ai pas de méthode "char.Parse". Je pense que ce n'est pas mal d'utiliser la classe Convert. (Voir CLR via C #, Jeffrey Richter)
Fonctionne avec les caractères ASCII ou Unicode
la source
Cela a fonctionné pour moi:
la source
int.Parse(foo.ToString())
, sauf pour être moins lisible?J'ai vu de nombreuses réponses mais elles me semblent déroutantes. Ne pouvons-nous pas simplement utiliser le type Casting.
Par exemple: -
la source