Code ASCII étendu et console

Le
darkwall_37
Bonjour,

J'espère ne pas me tromper de section. Etant donné que je cherche des
informations sur l'encodage des caractère, je suppose que je suis au
bon endroit. En gros je cherche à tester les lettres de l'ascii étendu
afin de leur assigner une valeur décimale de manière à pouvoir
application mon "encryption".

Pour m'entraîner j'essaye de manipuler les chaines de caractères ainsi
que la lecture/écriture de fichiers. Le code suivant permet
"d'encrypter" selon une transformation très complexe :joke:, les
caractères A-Z et 0-9, tout autre caractère est sinon transformé en
'x'. Le programme lit un fichier contenant la chaine de caractère à
transformer puis ensuite il fait son boulot.

Maintenant j'aimerais pouvoir le faire avec tout les caractères du
code ASCII étendu. J'utilise la fonction CharToOem pour afficher ces
caractères. Jusque là pas de soucis. Quand je viens à les tester c'es=
t
autre chose afin de leur assigner leur valeur décimale. Je sais que
pour le 'é' ont peut l'afficher en utilisant 202, donc en faisant le
test avec cela, la transformation s'opère. Maintenant pour les autres
caractères, comment je fais pour obtenir ces codes s'ils existent ?
Oui je vais me taper 256 lignes -.-. Je ne vois pas comment faire
autrement. Peut être que je me fourvoie et qu'il y a mieux à faire ?

Merci d'avance


#include<stdio.h>
#include<stdlib.h>
#include <windows.h>



int TailleFichier ( FILE
*fichier );
void MemoriserFichier ( FILE *fichier, char
*Chaine );
void CharToInt ( char *Chaine, int Taille, int
*Entier );
void Encryption ( int *Entier, int Taille, int
*EntierEncryptes );
void MethodeEncryption ( int *Entier, int Taille, char
*Chaine );
void AfficherTableauChar ( char *Tableau, int
Taille );
void AfficherTableauInt ( int *Tableau, int
Taille );

int main (void)
{

// On compte le nombre de charactères dans le fichier
FILE *f0 = fopen("cle.txt","r");
int taille=TailleFichier(f0);
fclose(f0);

// On alloue en mémoire les tableaux nécessaires
char *Raw = malloc(taille*sizeof(char));
char *Temp = malloc(taille*sizeof(char));
char *Encrypted = malloc(taille*sizeof(char));
int *RawToAscii = malloc(taille*sizeof(int ));
int *AsciiToEncrytp = malloc(taille*sizeof(int ));

printf("taille=%d",taille);

// On enregistre la chaine de caractères contenue dans le fichier
FILE * f1 = fopen("cle.txt","r");
MemoriserFichier(f1, Temp);
fclose(f1);


CharToOem ( Temp,Raw );
CharToInt ( Raw, taille, RawToAscii );
Encryption ( RawToAscii, taille, AsciiToEncrytp );
MethodeEncryption( AsciiToEncrytp, taille, Encrypted );

AfficherTableauChar(Raw, taille );
printf("");
AfficherTableauInt (RawToAscii, taille );
printf("");
AfficherTableauInt (AsciiToEncrytp, taille);
printf("");
AfficherTableauChar(Encrypted, taille );

getchar();
}

void AfficherTableauChar( char *Tableau, int Taille )
{
int i=0;
for ( i ; i<Taille ; i++ )
{
printf("%c",Tableau[i]);
}
}

void AfficherTableauInt( int *Tableau, int Taille )
{
int i=0;
for ( i ; i<Taille ; i++ )
{
printf("%d",Tableau[i]);
}
}


int TailleFichier( FILE *fichier )
{
int taille=0;
char c;
if(fichier != NULL)
{
while(fscanf(fichier,"%c",&c) != EOF)
{
taille++;
}
}

return taille;
}


void MemoriserFichier( FILE *fichier, char *Chaine )
{
if(fichier != NULL)
{
int i=0;
char c;
while(fscanf(fichier,"%c",&c) != EOF)
{
Chaine[i]=c;
i++;
}
}
}

void CharToInt( char *Chaine, int Taille, int *Entier )
{

int i=0;
for ( i ; i<Taille ; i++ )
{

char c=Chaine[i];
switch ( c )
{

case '201' :
Entier[i]=10;
break;

case 'B' :
Entier[i]=11;
break;

case 'C' :
Entier[i]=12;
break;

case 'D' :
Entier[i]=13;
break;

case 'E' :
Entier[i]=14;
break;

case 'F' :
Entier[i]=15;
break;

case 'G' :
Entier[i]=16;
break;

case 'H' :
Entier[i]=17;
break;

case 'I' :
Entier[i]=18;
break;

case 'J' :
Entier[i]=19;
break;

case 'K' :
Entier[i]=20;
break;

case 'L' :
Entier[i]=21;
break;

case 'M' :
Entier[i]=22;
break;

case 'N' :
Entier[i]=23;
break;

case 'O' :
Entier[i]=24;
break;

case 'P' :
Entier[i]=25;
break;

case 'Q' :
Entier[i]=26;
break;

case 'R' :
Entier[i]=27;
break;

case 'S' :
Entier[i]=28;
break;

case 'T' :
Entier[i]=29;
break;

case 'U' :
Entier[i]=30;
break;

case 'V' :
Entier[i]=31;
break;

case 'W' :
Entier[i]=32;
break;

case 'X' :
Entier[i]=33;
break;

case 'Y' :
Entier[i]=34;
break;

case 'Z' :
Entier[i]=35;
break;

case '0' :
Entier[i]=0;
break;

case '1' :
Entier[i]=1;
break;

case '2' :
Entier[i]=2;
break;

case '3' :
Entier[i]=3;
break;

case '4' :
Entier[i]=4;
break;

case '5' :
Entier[i]=5;
break;

case '6' :
Entier[i]=6;
break;

case '7' :
Entier[i]=7;
break;

case '8' :
Entier[i]=8;
break;

case '9' :
Entier[i]=9;
break;

default :
Entier[i]=999;
break;

}
}

}

void Encryption( int *Entier, int Taille, int *EntierEncryptes )
{
int i=0;
for ( i ; i<Taille ; i++ )
{
EntierEncryptes[i] = 35-Entier[i];
}
}

void MethodeEncryption( int *Entier, int Taille, char *Chaine )
{

int i=0;
for ( i ; i<Taille ; i++ )
{

int e=Entier[i];
switch ( e )
{

case 0 :
Chaine[i]='0';
break;

case 1 :
Chaine[i]='1';
break;

case 2 :
Chaine[i]='2';
break;

case 3 :
Chaine[i]='3';
break;

case 4 :
Chaine[i]='4';
break;

case 5 :
Chaine[i]='5';
break;

case 6 :
Chaine[i]='6';
break;

case 7 :
Chaine[i]='7';
break;

case 8 :
Chaine[i]='8';
break;

case 9 :
Chaine[i]='9';
break;

case 10 :
Chaine[i]='201';
break;

case 11 :
Chaine[i]='B';
break;

case 12 :
Chaine[i]='C';
break;

case 13 :
Chaine[i]='D';
break;

case 14 :
Chaine[i]='E';
break;

case 15 :
Chaine[i]='F';
break;

case 16 :
Chaine[i]='G';
break;

case 17 :
Chaine[i]='H';
break;

case 18 :
Chaine[i]='I';
break;

case 19 :
Chaine[i]='J';
break;

case 20 :
Chaine[i]='K';
break;

case 21 :
Chaine[i]='L';
break;

case 22 :
Chaine[i]='M';
break;

case 23 :
Chaine[i]='N';
break;

case 24 :
Chaine[i]='O';
break;

case 25 :
Chaine[i]='P';
break;

case 26 :
Chaine[i]='Q';
break;

case 27 :
Chaine[i]='R';
break;

case 28 :
Chaine[i]='S';
break;

case 29 :
Chaine[i]='T';
break;

case 30 :
Chaine[i]='U';
break;

case 31 :
Chaine[i]='V';
break;

case 32 :
Chaine[i]='W';
break;

case 33 :
Chaine[i]='X';
break;

case 34 :
Chaine[i]='Y';
break;

case 35 :
Chaine[i]='Z';
break;

default :
Chaine[i]='x';
break;

}
}

}
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian ASTOR
Le #20383041
On 19 oct, 22:03, darkwall_37
Maintenant j'aimerais pouvoir le faire avec tout les caractères du
code ASCII étendu. J'utilise la fonction CharToOem pour afficher ces
caractères. Jusque là pas de soucis. Quand je viens à les tester c' est
autre chose afin de leur assigner leur valeur décimale. Je sais que
pour le 'é' ont peut l'afficher en utilisant 202, donc en faisant le
test avec cela, la transformation s'opère. Maintenant pour les autres
caractères, comment je fais pour obtenir ces codes s'ils existent ?



202, c'est l'octal de 130
Les autres sont dans la table OEM :
http://profgeii.free.fr/explorer/ii1/ASCII.pdf
(Et TailleFichier() ne se fait pas comme ça, mais avec stat() ou
GetFileSize())
darkwall_37
Le #20383291
On 20 oct, 01:37, Christian ASTOR
On 19 oct, 22:03, darkwall_37
> Maintenant j'aimerais pouvoir le faire avec tout les caractères du
> code ASCII étendu. J'utilise la fonction CharToOem pour afficher ces
> caractères. Jusque là pas de soucis. Quand je viens à les tester c'est
> autre chose afin de leur assigner leur valeur décimale. Je sais que
> pour le 'é' ont peut l'afficher en utilisant 202, donc en faisant le
> test avec cela, la transformation s'opère. Maintenant pour les autres
> caractères, comment je fais pour obtenir ces codes s'ils existent ?

202, c'est l'octal de 130
Les autres sont dans la table OEM :http://profgeii.free.fr/explorer/ii1/A SCII.pdf
(Et TailleFichier() ne se fait pas comme ça, mais avec stat() ou
GetFileSize())


Je cherche à savoir comment faire le test if ( c=='é' ), if
(c=='è')... pour tous les caractères du code ASCII etendu qui ne so nt
pas dans l'ASCII. Sauf que ces tests ne fonctionne pas sauf si je
remplace 'é' par 202. Mais quel est le rapport entre 130 ça valeur
ASCII etendue et 202. Je cherche ces codes là pour faire les tests.
Christian ASTOR
Le #20384821
On 20 oct, 07:30, darkwall_37
On 20 oct, 01:37, Christian ASTOR
> > Maintenant j'aimerais pouvoir le faire avec tout les caractères du
> > code ASCII étendu. J'utilise la fonction CharToOem pour afficher ce s
> > caractères. Jusque là pas de soucis. Quand je viens à les teste r c'est
> > autre chose afin de leur assigner leur valeur décimale. Je sais que
> > pour le 'é' ont peut l'afficher en utilisant 202, donc en faisant le
> > test avec cela, la transformation s'opère. Maintenant pour les autr es
> > caractères, comment je fais pour obtenir ces codes s'ils existent ?

> 202, c'est l'octal de 130
> Les autres sont dans la table OEM :http://profgeii.free.fr/explorer/ii1 /ASCII.pdf
> (Et TailleFichier() ne se fait pas comme ça, mais avec stat() ou
> GetFileSize())

Mais quel est le rapport entre 130 ça valeur
ASCII etendue et 202. Je cherche ces codes là pour faire les tests.



Mais exactement ce que je viens de dire et ce qu'il y a dans la
table :
"é" OEM =
',' ANSI =
130 =
202 =
0x82
darkwall_37
Le #20385181
On 20 oct, 12:11, Christian ASTOR
On 20 oct, 07:30, darkwall_37


> On 20 oct, 01:37, Christian ASTOR
> > > Maintenant j'aimerais pouvoir le faire avec tout les caractères d u
> > > code ASCII étendu. J'utilise la fonction CharToOem pour afficher ces
> > > caractères. Jusque là pas de soucis. Quand je viens à les tes ter c'est
> > > autre chose afin de leur assigner leur valeur décimale. Je sais q ue
> > > pour le 'é' ont peut l'afficher en utilisant 202, donc en faisan t le
> > > test avec cela, la transformation s'opère. Maintenant pour les au tres
> > > caractères, comment je fais pour obtenir ces codes s'ils existent ?

> > 202, c'est l'octal de 130
> > Les autres sont dans la table OEM :http://profgeii.free.fr/explorer/i i1/ASCII.pdf
> > (Et TailleFichier() ne se fait pas comme ça, mais avec stat() ou
> > GetFileSize())

> Mais quel est le rapport entre 130 ça valeur
> ASCII etendue et 202. Je cherche ces codes là pour faire les tests.

Mais exactement ce que je viens de dire et ce qu'il y a dans la
table :
"é" OEM =
 ',' ANSI =
130 =
202 =
0x82



Oui excusez moi ! autant pour moi. Merci beaucoup pour votre précieuse
aide !
Publicité
Poster une réponse
Anonyme