Posted June 7, 200916 yr Bonjour, Je dois rendre un projet pour demain, il s'agit du cryptage RSA, mon projet est terminé mais je n'arrive pas à coder tous les caractères faisants partis du code ASCII étendu. J'utilise visual C++ et pour récupérer le code ASCII j'utilise ceci : int code_ascii; char caract; code_ascii = (long) caract; Qu'y a t il comme solution pour récupérer le véritable Code ASCII étendu (et non pas par exemple -23 pour le "é" ? Merci par avance, William
June 7, 200916 yr Bonjour,Je dois rendre un projet pour demain, il s'agit du cryptage RSA, mon projet est terminé mais je n'arrive pas à coder tous les caractères faisants partis du code ASCII étendu. J'utilise visual C++ et pour récupérer le code ASCII j'utilise ceci : int code_ascii; char caract; code_ascii = (long) caract; Qu'y a t il comme solution pour récupérer le véritable Code ASCII étendu (et non pas par exemple -23 pour le "é" ? Merci par avance, William pas int mais unsigned char
June 7, 200916 yr Author Bonjour, Je n'ai rien déclaré du tout pour l'UNICODE, ISO truc. De plus j'ai fait par exemple : void main(void) { unsigned char code_ascii; code_ascii = (long) "é"; printf("%d", code_ascii); getch(); } et j'obtiens alors qu'en ASCII étendue c'est 130 (http://www.table-ascii.com/) Comment dois je faire par exemple si j'ai le caractère "é" pour le récupérer dans un long ou int ? Merci Willou
June 7, 200916 yr Est ce que printf("é") t'affiche bien é ? Chez moi, ca marche, les codes suivant : void main() { unsigned char code; code = 'é'; printf("%u%c", code, code); getch(); } void main() { unsigned char code; code = 130; printf("%u%c", code, code); getch(); }
June 7, 200916 yr Author Pour le premier ça m'affiche "ù" La 2nd solution affiche bien "é" void main() { unsigned char code; code = 130; printf("%u%c", code, code); getch(); }
June 7, 200916 yr ton compilo encode tes chaînes en Latin1(ISO-8859-1), il est donc normal que tu ne récupères pas correctement le code ASCII. 1) Si tu lis depuis un fichier un texte, ton 'é' sera correct 2) Si tu as besoin d'une chaîne litérale, utilise une fonction de conversion de Latin1 vers ascii (CharToOem ?) #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <windows.h> void main() { wchar_t * cc = L"é"; char * cc2 = new char[3]; CharToOem(cc,cc2); unsigned char code; code = cc2[0]; printf("%u%c", code, code); getch(); }
June 7, 200916 yr Author Oulala ça se complique je suis novis en C En fait je charge un fichier .txt avec la fonction fgetc() et je charge chacuns des caractères dans un tableau dynamique au format char. Ensuite je créer un autre tableau dynamique cette fois ci en long qui contiendra pour chaques lignes le caractère correspondant au code ASCII. Malgré tout j'obtiens quand même un code ASCII négatif dans la donnée en long. En gros ça ressemble à ça : for(i=0; i < (fic.longeur_tableau-1); i++) //On balaye 1 à 1 les caractères du fichiers { var = fgetc(fichier); if(var != EOF) { fic.contenu_depart_char[i] = var; fic.contenu_depart_long[i] = (long) fic.contenu_depart_char[i]; }
June 7, 200916 yr Le problème c'est que le type char ne peut contenir QUE des caractères ASCII, et pas au-delà. Si tu veux réellement lire le bon caractère, il faut d'abord connaître de quelle manière il a été écrit, c'est à dire connaître son encodage. Ça ne dépends pas de ton compilateur mais du fichier que tu lis. Pour info tu peux voir l'encodage d'un fichier créé par Notepad quand tu fais "Enregistrer sous" (il y a une liste pour choisir l'encodage). Ceci dit ça ne devrait pas te poser de problèmes puisque le cryptage se fait au niveau des octets et non des caractères. Quel que soit le contenu du fichier tu devrais retrouver le même une fois encrypté - décrypté, et c'est ça qui compte !
June 7, 200916 yr Malgré tout j'obtiens quand même un code ASCII négatif dans la donnée en long.[/code] Parce que ce doit etre un UNSIGNED char ! Le convertir en long ne sert à rien.
June 7, 200916 yr Author Le problème c'est que si j'obtiens un nombre négatif c'est trop le bazar avec le RSA. void main() { unsigned int code_ascii; unsigned char caract[3] ="é"; code_ascii = (int) caract[0]; printf("%d", code_ascii); getch(); } J'obtiens alors 233 ce qui ne correspond pas au code ASCII étendu du "é" qui est de 130.
June 7, 200916 yr Quand toi tu regarde le "code ASCII" du caractère 'é', tu obtiens le code Latin1 parce que ton compilo encode ta chaine litérale en Latin1. Mais si tu lis un fichier texte codé en ASCII, tu obtiendras bien 130 !
Archived
This topic is now archived and is closed to further replies.