J en ai marre !!!! convertir une lettre en nombre (ascii)

adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008 - 29 août 2005 à 20:07
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 - 30 août 2005 à 08:07
Bonjour je lutte depuis pa mal de temps et je croi ke j y ariverai pas tou seul
Je voudrai savoir comment on convertir une caractere d une chaine entree en nombre ascii
voila mon code pour l instant

{
int i = 3445;
char cle[1], *stop;//si kkun pe m expliker comment marche cette declaration
int asc_cle=0;



printf("Entrez la clé de cryptage : ");
gets(cle);

asc_cle=strtol(cle,stop,10);


printf("%d\n",asc_cle);

return 0;
}

(Je debute en C faut jai reussi en VBmais la faut penser differemment argh)

J attend vos reponses
merci !

7 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
29 août 2005 à 20:20
C'est pas forcément évident pour un débutant. En fait le deuxième paramètre est un pointeur qu'on veut modifier, on passe donc son adresse:


char* fin;
char chaine[] = "12345b";
long l = strtol(chaine, &fin, 10);

normalement, fin pointe maintenant vers b, le premier caractère qui n'a pas été utilisé pour calculer i
0
adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008 1
29 août 2005 à 20:39
euh ouai je croi que jme suis mal exprimé

En faite l utilisateur entre son text (pas un nombre) par exemple "coucou"
ensuite je recupere le caractere "c" et la je le converti en ascii et j obtien mon nombre avec lekel je fai ske jve apres
voila :)

PS: Excellant ton avatar j aime trop cet ecureuil
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
29 août 2005 à 20:44
Ya pas de conversion à faire
char c[] = "coucou";
printf("%d", c[0]);
0
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
29 août 2005 à 20:55
abandonne le gets car tu as aucune limitation pour la taille de ton buffer utilise plutot fgets()

ex : fgets( chaine , tailleMaximal , stdin );



exemple dans ton exemple :

fgets( cle , 1 , stdin );



pour convertir un caratère en ascii c'est tout simple tu le cast simplement

int nbASCII = (int)'a';



ton programme donne :

char cle[256];

int asc_cle=0;

printf("Entrez la clé de cryptage : ");
fgets (cle , 256 , stdin );



while( i<256 && cle[i]!='\0' ) // le '\0' caratérise une fin de chaine

{

asc_cle = (int)cle[i]; // transforme la ième lettre en code ASCII

// traitement

}



return 0;








Voili,Voilou
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008 1
29 août 2005 à 21:02
cool
Merci !
Mais ya juste un truc que je comprend pas


Pour la fonction fgets c koi stdin j ai vu ke sa correspondai a FILE mais je vois pas ske c est et est ce important de ne pas avoir de limitation de la taille du buffer avec gets() ?
0
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
29 août 2005 à 21:18
il y a 4 buffer entrées / sortie prédéfinis en c.

1 buffer d'entré : stdin pour le clavier.

3 buffer de sortie : stdout sortie sur l'écran , stderr sortie sur
l'écran ( sans tampon ) , stdlog ... ( je sais plus trop; je m'en sers
jamais ).



la limitation est tres important car dans ta source tu déclarais un
buffer de 1 caractère. ( char cle[1] ). si l'utilisateur tape une
phrase de 20 caractères la fonction gets() va écrire 20 caractère dans
ton buffer et va donc débordé (de 19 ) sur une zone mémoire non aloué.
Normalement le systeme va s'en apercevoir est du va avoir une erreur
windows du type : Machin.exe a planter. la mémoire ne peut pas être
read...



alors qu'avec le fgets tu limite le nombre de carctère a écrire et donc
ainsi même si l'utilisateur entre 1000 caratère fgets ne dépassera pas
la limite fixé.


Voili,Voilou
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
30 août 2005 à 08:07
C'est meme pir que ca dans ce cas, avec char cle[1] le dépassement va
se faire sur ce qui à été aloué précédamment sur la pile et écraser la
valeur d'autres variables globales, de l'adresse retour de la
fonction...
0
Rejoignez-nous