web-dev-qa-db-fra.com

Comment convertir un caractere ascii en un int en C

Comment puis-je convertir un caractère ascii en un int en C?

15
node ninja

Qu'en est-il de:

int a_as_int = (int)'a';
18
rjnilsson

Recherchez-vous ceci:

int c = some_ascii_character;

Ou simplement convertir sans affectation:

(int)some_aschii_character;
11
UmmaGumma

Utilisez la fonctionASCIIto Integer atoi() qui accepte une chaîne et la convertit en entier:

#include <stdlib.h>

int num = atoi("23"); // 23

Si la chaîne contient une décimale, le nombre sera tronqué:

int num = atoi("23.21"); // 23
4
Shakespear

Je suis d'accord avec Ashot et Cwan, mais peut-être aimeriez-vous convertir un code ASCII tel que '7' en un int tel que 7? 

Puis je vous recoomend: 

char seven = '7';
int i = seven - '0'; 

.__ ou peut-être que vous recevez un avertissement, 

int i = (int) (seven - '0'); 

</ strike> corrigé après les commentaires, merci.

3
user unknown

Une valeur de caractère en C est implicitement convertible en un entier. Par exemple, char c; ... printf("%d", c) affiche la valeur décimale ASCII de c, et int i = c; insère la valeur ASCII de c dans i. Vous pouvez aussi explicitement le convertir avec (int)c. Si vous voulez dire autre chose, comme comment convertir un chiffre ASCII en un entier, ce serait c - '0', qui convertit implicitement c en un int et soustrait ensuite la valeur ASCII de '0', à savoir 48 ( en C, les constantes de caractère telles que '0' sont de type int, pas char, pour des raisons historiques).

2
Jim Balter

Vous voulez dire la valeur ordinale ASCII? Essayez le typage comme celui-ci:

int x = 'a';
1
Jhourlad Estrella

Comme tout le monde vous l'a dit, vous pouvez le convertir directement ... SAUF si vous vouliez dire quelque chose comme "comment puis-je convertir un caractère ASCII étendu en sa valeur UTF-16 ou UTF-32". C'est une question TOTALEMENT différente (une au moins aussi bonne). Et un très difficile, si je me souviens bien, si vous utilisez uniquement du "pur" C. Vous pouvez alors commencer ici: https://stackoverflow.com/questions/114611/what-is-the-best-unicode- bibliothèque-pour-c/114643 # 114643

(pour ASCII étendu, je veux dire l’une des nombreuses "extensions" du jeu ASCII. Les 0-127 caractères du jeu de base ASCII sont directement convertibles en Unicode, tandis que les 128 255 ne sont pas.). Par exemple, ISO_8859-1 http://en.wikipedia.org/wiki/ISO_8859-1 est une extension de 8 bits du jeu de 7 bits ASCII, ou des pages de code (assez célèbres) 437 et 850 .

0
xanatos

Il n'est pas possible avec la bibliothèque standard C99, à moins d'écrire manuellement une mappe à partir de constantes de caractère dans la valeur ASCII int correspondante.

Les constantes de caractère en C comme 'a' ne sont pas garanties en ASCII.

C99 ne donne que des garanties sur ces constantes, par exemple: que les chiffres sont contigus .

Le mot ASCII apparaît uniquement sur le brouillon standard C99 N1256 dans les notes de bas de page et la note de bas de page 173) indique:

Dans une implémentation qui utilise le jeu de caractères US ASCII à sept bits, les caractères d'impression sont ceux dont les valeurs sont comprises entre 0x20 (espace) et 0x7E (tilde); les caractères de contrôle sont ceux dont les valeurs vont de 0 (NUL) à 0x1F (US) et au caractère 0x7F (DEL).

impliquant que ASCII n'est pas la seule possibilité