Aller au contenu

Code ASCII étendu en C


Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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();
}

Lien vers le commentaire
Partager sur d’autres sites

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();
}

Lien vers le commentaire
Partager sur d’autres sites

Oulala ça se complique je suis novis en C :transpi:

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];
}

Lien vers le commentaire
Partager sur d’autres sites

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 ! :transpi:

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...