Oui, c'est sûr, à la conversion. C impose de le travail. Cette garantie est dans la section 5.2.1 du paragraphe 2 de la dernière ISO C standard, un récent projet de qui est N1570:
De base, la source et la base de l'exécution des jeux de caractères sont les suivants
membres:
[...]
le 10 décimal chiffres
0 1 2 3 4 5 6 7 8 9
[...]
À la fois la source et l'exécution de base des jeux de caractères, le
la valeur de chaque caractère après 0 dans la liste ci-dessus de chiffres après la virgule doit être plus grand que
la valeur de la précédente.
ASCII et EBCDIC, et les jeux de caractères dérivés, de satisfaire à cette exigence, qui est pourquoi le C standard a été en mesure de l'imposer. Notez que les lettres ne sont pas contigus en EBCDIC, et C ne les oblige pas à être.
Il n'existe pas de fonction de bibliothèque à le faire pour un seul char
, vous auriez besoin de construire une chaîne de première:
int digit_to_int(char d)
{
char str[2];
str[0] = d;
str[1] = '\0';
return (int) strtol(str, NULL, 10);
}
Vous pouvez également utiliser l' atoi()
fonction pour faire la conversion, une fois que vous avez une chaîne de caractères, mais strtol()
est meilleur et plus sûr.
Comme les commentateurs l'ont souligné, c'est l'extrême exagéré d'appeler une fonction pour effectuer cette conversion; votre approche initiale de la soustraire '0' est la bonne façon de le faire. Je voulais juste montrer comment la norme recommandée approche de la conversion d'un nombre en une chaîne de caractères à un "vrai" nombre serait utilisé, ici.