Pour m'entra=EEner j'essaye de manipuler les chaines de caract=E8res ainsi
que la lecture/=E9criture de fichiers. Le code suivant permet
"d'encrypter" selon une transformation tr=E8s complexe :joke:, les
caract=E8res A-Z et 0-9, tout autre caract=E8re est sinon transform=E9 en
'x'. Le programme lit un fichier contenant la chaine de caract=E8re =E0
transformer puis ensuite il fait son boulot.
Maintenant j'aimerais pouvoir le faire avec tout les caract=E8res du
code ASCII =E9tendu. J'utilise la fonction CharToOem pour afficher ces
caract=E8res. Jusque l=E0 pas de soucis. Quand je viens =E0 les tester c'es=
t
autre chose afin de leur assigner leur valeur d=E9cimale. Je sais que
pour le '=E9' ont peut l'afficher en utilisant \202, donc en faisant le
test avec cela, la transformation s'op=E8re. Maintenant pour les autres
caract=E8res, 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 =EAtre que je me fourvoie et qu'il y a mieux =E0 faire ?
int CharFichier( FILE *fichier );
void EnregistrerFichier( FILE *fichier, char *Chaine );
void CharToInt( char *Chaine, int Taille, int *Entier );
void Encryption( int *Entier, int Taille, int *EntierEncryptes );
void FinEncryption( int *Entier, int Taille, char *Chaine );
int main (void)
{
FILE *f0 =3D fopen("cle.txt","r");
int taille=3DCharFichier(f0);
fclose(f0);
char *Raw=3Dmalloc(taille*sizeof(char));
char *Encrypted=3Dmalloc(taille*sizeof(char));
int *RawToInt=3Dmalloc(taille*sizeof(int));
int *IntToEncrypt=3Dmalloc(taille*sizeof(int));
char *Init=3Dmalloc(taille*sizeof(char));
printf("taille=3D%d\n",taille);
FILE * f1 =3D fopen("cle.txt","r");
EnregistrerFichier(f1, Init);
fclose(f1);
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Lucas Levrel
Le 19 octobre 2009, darkwall_37 a écrit :
Maintenant j'aimerais pouvoir le faire avec tout les caractères du code ASCII étendu.
Il n'y a pas un unique « ASCII étendu ». La correspondance caractère-nombre dépend de ce qu'on appelle l'encodage. En général, les encodages reprennent tous l'ASCII pour les nombres 0 à 127 (7 bits). Regarde sur Wikipedia les noms latin-1, ..., latin-9, mac-roman, cp1252, utf-8...
L'encodage utilisé est défini par le système d'exploitation. Pour Windows je ne sais pas où. Pour Linux c'est la variable $LANG qui le fait indirectement.
-- LL
Le 19 octobre 2009, darkwall_37 a écrit :
Maintenant j'aimerais pouvoir le faire avec tout les caractères du
code ASCII étendu.
Il n'y a pas un unique « ASCII étendu ». La correspondance
caractère-nombre dépend de ce qu'on appelle l'encodage. En général, les
encodages reprennent tous l'ASCII pour les nombres 0 à 127 (7 bits).
Regarde sur Wikipedia les noms latin-1, ..., latin-9, mac-roman, cp1252,
utf-8...
L'encodage utilisé est défini par le système d'exploitation. Pour Windows
je ne sais pas où. Pour Linux c'est la variable $LANG qui le fait
indirectement.
Maintenant j'aimerais pouvoir le faire avec tout les caractères du code ASCII étendu.
Il n'y a pas un unique « ASCII étendu ». La correspondance caractère-nombre dépend de ce qu'on appelle l'encodage. En général, les encodages reprennent tous l'ASCII pour les nombres 0 à 127 (7 bits). Regarde sur Wikipedia les noms latin-1, ..., latin-9, mac-roman, cp1252, utf-8...
L'encodage utilisé est défini par le système d'exploitation. Pour Windows je ne sais pas où. Pour Linux c'est la variable $LANG qui le fait indirectement.
-- LL
darkwall_37
On 20 oct, 10:26, Lucas Levrel wrote:
Le 19 octobre 2009, darkwall_37 a écrit :
> Maintenant j'aimerais pouvoir le faire avec tout les caractères du > code ASCII étendu.
Il n'y a pas un unique « ASCII étendu ». La correspondance caractère-nombre dépend de ce qu'on appelle l'encodage. En généra l, les encodages reprennent tous l'ASCII pour les nombres 0 à 127 (7 bits). Regarde sur Wikipedia les noms latin-1, ..., latin-9, mac-roman, cp1252, utf-8...
L'encodage utilisé est défini par le système d'exploitation. Pour W indows je ne sais pas où. Pour Linux c'est la variable $LANG qui le fait indirectement.
-- LL
OK mais si je fais strcmp( temp, "é")==0, (temp=chaine[i]) le test renvois toujours 1 bien que le dans la chaine contienne 'é'. Y'a t-il une solution ?
On 20 oct, 10:26, Lucas Levrel <lucas.lev...@univ-paris12.fr> wrote:
Le 19 octobre 2009, darkwall_37 a écrit :
> Maintenant j'aimerais pouvoir le faire avec tout les caractères du
> code ASCII étendu.
Il n'y a pas un unique « ASCII étendu ». La correspondance
caractère-nombre dépend de ce qu'on appelle l'encodage. En généra l, les
encodages reprennent tous l'ASCII pour les nombres 0 à 127 (7 bits).
Regarde sur Wikipedia les noms latin-1, ..., latin-9, mac-roman, cp1252,
utf-8...
L'encodage utilisé est défini par le système d'exploitation. Pour W indows
je ne sais pas où. Pour Linux c'est la variable $LANG qui le fait
indirectement.
--
LL
OK mais si je fais strcmp( temp, "é")==0, (temp=chaine[i]) le test
renvois toujours 1 bien que le dans la chaine contienne 'é'. Y'a t-il
une solution ?
> Maintenant j'aimerais pouvoir le faire avec tout les caractères du > code ASCII étendu.
Il n'y a pas un unique « ASCII étendu ». La correspondance caractère-nombre dépend de ce qu'on appelle l'encodage. En généra l, les encodages reprennent tous l'ASCII pour les nombres 0 à 127 (7 bits). Regarde sur Wikipedia les noms latin-1, ..., latin-9, mac-roman, cp1252, utf-8...
L'encodage utilisé est défini par le système d'exploitation. Pour W indows je ne sais pas où. Pour Linux c'est la variable $LANG qui le fait indirectement.
-- LL
OK mais si je fais strcmp( temp, "é")==0, (temp=chaine[i]) le test renvois toujours 1 bien que le dans la chaine contienne 'é'. Y'a t-il une solution ?
Hamiral
darkwall_37 a écrit :
OK mais si je fais strcmp( temp, "é")==0, (temp=chaine[i]) le t est renvois toujours 1 bien que le dans la chaine contienne 'é'. Y'a t-il une solution ?
Serait-ce que l'encodage dans lequel votre fichier source est enregistré est différent de l'encodage dans lequel le caractère est mis dans "te mp" à l'exécution ? C'est à s'en arracher les cheveux...
Ham
darkwall_37 a écrit :
OK mais si je fais strcmp( temp, "é")==0, (temp=chaine[i]) le t est
renvois toujours 1 bien que le dans la chaine contienne 'é'. Y'a t-il
une solution ?
Serait-ce que l'encodage dans lequel votre fichier source est enregistré
est différent de l'encodage dans lequel le caractère est mis dans "te mp"
à l'exécution ?
C'est à s'en arracher les cheveux...
OK mais si je fais strcmp( temp, "é")==0, (temp=chaine[i]) le t est renvois toujours 1 bien que le dans la chaine contienne 'é'. Y'a t-il une solution ?
Serait-ce que l'encodage dans lequel votre fichier source est enregistré est différent de l'encodage dans lequel le caractère est mis dans "te mp" à l'exécution ? C'est à s'en arracher les cheveux...
Ham
darkwall_37
On 20 oct, 15:05, Hamiral wrote:
darkwall_37 a écrit :
> OK mais si je fais strcmp( temp, "é")==0, (temp=chaine[i]) le t est > renvois toujours 1 bien que le dans la chaine contienne 'é'. Y'a t-il > une solution ?
Serait-ce que l'encodage dans lequel votre fichier source est enregistr é est différent de l'encodage dans lequel le caractère est mis dans "te mp" à l'exécution ? C'est à s'en arracher les cheveux...
Ham
Si en fait cela marche. Je voudrais pouvoir générer la table ascii étendu sous forme octal pour éviter de me taper les 256 caractères. J'ai de multiples erreurs à la compilation sur le tableau ( il est faux mais en supposant qu'il le soit ), pouquoi ai-je des erreurs en sachant que par exemple 202 correspond bien au caractère "é" ?
void CharToInt( char *Chaine, int Taille, int *Entier ) {
On 20 oct, 15:05, Hamiral <hami...@hamham.com> wrote:
darkwall_37 a écrit :
> OK mais si je fais strcmp( temp, "é")==0, (temp=chaine[i]) le t est
> renvois toujours 1 bien que le dans la chaine contienne 'é'. Y'a t-il
> une solution ?
Serait-ce que l'encodage dans lequel votre fichier source est enregistr é
est différent de l'encodage dans lequel le caractère est mis dans "te mp"
à l'exécution ?
C'est à s'en arracher les cheveux...
Ham
Si en fait cela marche.
Je voudrais pouvoir générer la table ascii étendu sous forme octal
pour éviter de me taper les 256 caractères. J'ai de multiples erreurs
à la compilation sur le tableau ( il est faux mais en supposant qu'il
le soit ), pouquoi ai-je des erreurs en sachant que par exemple 202
correspond bien au caractère "é" ?
void CharToInt( char *Chaine, int Taille, int *Entier )
{
> OK mais si je fais strcmp( temp, "é")==0, (temp=chaine[i]) le t est > renvois toujours 1 bien que le dans la chaine contienne 'é'. Y'a t-il > une solution ?
Serait-ce que l'encodage dans lequel votre fichier source est enregistr é est différent de l'encodage dans lequel le caractère est mis dans "te mp" à l'exécution ? C'est à s'en arracher les cheveux...
Ham
Si en fait cela marche. Je voudrais pouvoir générer la table ascii étendu sous forme octal pour éviter de me taper les 256 caractères. J'ai de multiples erreurs à la compilation sur le tableau ( il est faux mais en supposant qu'il le soit ), pouquoi ai-je des erreurs en sachant que par exemple 202 correspond bien au caractère "é" ?
void CharToInt( char *Chaine, int Taille, int *Entier ) {
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.
Il y a de nombreuses remarques à faire sur ton code. Le premier est que ton exemple ne compile pas. Au-delà de cet étrange en-tete windows.h (:D), il manque la fonction CharToOem. mais le pire à mon avis, est le manque de commentaire, et l'absence d'intelligibilité du nom des fonctions : on se demande ce qu'elles font. D'autres voueraient aux Gémonies l'absence de tout code de controle des erreurs sur les fonctions d'aquisition de ressources (malloc, fopen).
Mais j'insiste sur l'expression de ton code et de commentaires : on ne comprend pas ce que tu veux faire, et c'est donc difficile de comprendre les erreurs que tu fais.
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 ?
'a' est un entier. Les littéraux de caractères sont fondamentalement des entiers cours. Donc tu peux écrire : int charasint = (int) 'a' ;
En ce qui concerne les caractères d'ASCII étendu, ça dépend entre autre du jeu de caractères que tu utilises pour écrire ton code, et du jeu de caractère du fichier traduit.
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 ?
Oui mais non, c'est pas très adroit. Tu peux caster (en comprenant le mécanisme sous-jacent), et utiliser les fonctions dédiées (atoint, isalpha, etc).
Mais au fait, pourquoi tu traduit les char en int ?
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.
Il y a de nombreuses remarques à faire sur ton code. Le premier est
que ton exemple ne compile pas. Au-delà de cet étrange en-tete windows.h
(:D), il manque la fonction CharToOem. mais le pire à mon avis, est le
manque de commentaire, et l'absence d'intelligibilité du nom des
fonctions : on se demande ce qu'elles font. D'autres voueraient aux
Gémonies l'absence de tout code de controle des erreurs sur les
fonctions d'aquisition de ressources (malloc, fopen).
Mais j'insiste sur l'expression de ton code et de commentaires : on
ne comprend pas ce que tu veux faire, et c'est donc difficile de
comprendre les erreurs que tu fais.
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 ?
'a' est un entier. Les littéraux de caractères sont fondamentalement
des entiers cours. Donc tu peux écrire :
int charasint = (int) 'a' ;
En ce qui concerne les caractères d'ASCII étendu, ça dépend entre
autre du jeu de caractères que tu utilises pour écrire ton code, et du
jeu de caractère du fichier traduit.
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 ?
Oui mais non, c'est pas très adroit. Tu peux caster (en comprenant le
mécanisme sous-jacent), et utiliser les fonctions dédiées (atoint,
isalpha, etc).
Mais au fait, pourquoi tu traduit les char en int ?
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.
Il y a de nombreuses remarques à faire sur ton code. Le premier est que ton exemple ne compile pas. Au-delà de cet étrange en-tete windows.h (:D), il manque la fonction CharToOem. mais le pire à mon avis, est le manque de commentaire, et l'absence d'intelligibilité du nom des fonctions : on se demande ce qu'elles font. D'autres voueraient aux Gémonies l'absence de tout code de controle des erreurs sur les fonctions d'aquisition de ressources (malloc, fopen).
Mais j'insiste sur l'expression de ton code et de commentaires : on ne comprend pas ce que tu veux faire, et c'est donc difficile de comprendre les erreurs que tu fais.
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 ?
'a' est un entier. Les littéraux de caractères sont fondamentalement des entiers cours. Donc tu peux écrire : int charasint = (int) 'a' ;
En ce qui concerne les caractères d'ASCII étendu, ça dépend entre autre du jeu de caractères que tu utilises pour écrire ton code, et du jeu de caractère du fichier traduit.
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 ?
Oui mais non, c'est pas très adroit. Tu peux caster (en comprenant le mécanisme sous-jacent), et utiliser les fonctions dédiées (atoint, isalpha, etc).
Mais au fait, pourquoi tu traduit les char en int ?
darkwall_37 wrote: > 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.
Il y a de nombreuses remarques faire sur ton code. Le premier est que ton exemple ne compile pas. Au-del de cet trange en-tete windows.h (:D), il manque la fonction CharToOem. mais le pire mon avis, est le manque de commentaire, et l'absence d'intelligibilit du nom des fonctions : on se demande ce qu'elles font. D'autres voueraient aux G monies l'absence de tout code de controle des erreurs sur les fonctions d'aquisition de ressources (malloc, fopen).
Mais j'insiste sur l'expression de ton code et de commentaires : o n ne comprend pas ce que tu veux faire, et c'est donc difficile de comprendre les erreurs que tu fais.
> 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 ?
'a' est un entier. Les litt raux de caract res sont fondamentaleme nt des entiers cours. Donc tu peux crire : int charasint = (int) 'a' ;
En ce qui concerne les caract res d'ASCII tendu, a d pend entre autre du jeu de caract res que tu utilises pour crire ton code, et du jeu de caract re du fichier traduit.
> 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 ?
Oui mais non, c'est pas tr s adroit. Tu peux caster (en comprenant le m canisme sous-jacent), et utiliser les fonctions d di es (atoint, isalpha, etc).
Mais au fait, pourquoi tu traduit les char en int ?
-- Micka l Wolff aka Lupus Michaelishttp://lupusmic.org
J'ai un fichier texte (ouverture avec notepad). Je rentre une quelconque chaine de caractères ( encodage ASCII Etendu des caractères ). Je la récupère dans un tableau de type char. Une première fonction me retourne un tableau d'entiers contenant la valeur décimale correspondante du code ASCII étendu Une seconde fonction de "cryptage" modifie mon tableau d'entiers. Une troisième fonction me retourne un tableau de type char contenant la nouvelle chaine de caractères du aux nouvelles valeurs décimales modifiées par la fonction précédentes. L'entrée et le résultat sont affichés dans l'invite de commande.
Mon problème étant que je souhaiterais savoir comment faire pour sauver dans un tableau de type char tous les caractères de la table ASCII étendue pour ne pas avoir à le faire manuellement ? Je me souvenais que 202 correspondait au caractère é. Je me suis donc dis qu'avec une boucle, une fonction de convertion de base 10 à base 8 je pourrais remplir un tableau de type char de la forme ASCII[256]= {' ',...,'377'}; Mais cela ne fonctionne apparemment pas.
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=%dn",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 ); // On donne la valeur décimale correspondante au caractère CharToInt ( Raw, taille, RawToAscii ); // On effectue l'opération de cryptage Encryption ( RawToAscii, taille, AsciiToEncrytp ); // On cherche le nouveau caractère correspondant à la valeur décimale MethodeEncryption( AsciiToEncrytp, taille, Encrypted );
void CharToInt( char *Chaine, int Taille, int *Entier ) {
int i=0; for ( i ; i<Taille ; i++ ) {
char c=Chaine[i]; switch ( c ) {
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;
case 'é' : Entier[i]; break;
case 'B' : Entier[i]; break;
case 'C' : Entier[i]; break;
case 'D' : Entier[i]; break;
case 'E' : Entier[i]; break;
case 'F' : Entier[i]; break;
case 'G' : Entier[i]; break;
case 'H' : Entier[i]; break;
case 'I' : Entier[i]; break;
case 'J' : Entier[i]; break;
case 'K' : Entier[i] ; break;
case 'L' : Entier[i]!; break;
case 'M' : Entier[i]"; break;
case 'N' : Entier[i]#; break;
case 'O' : Entier[i]$; break;
case 'P' : Entier[i]%; break;
case 'Q' : Entier[i]&; break;
case 'R' : Entier[i]'; break;
case 'S' : Entier[i](; break;
case 'T' : Entier[i]); break;
case 'U' : Entier[i]0; break;
case 'V' : Entier[i]1; break;
case 'W' : Entier[i]2; break;
case 'X' : Entier[i]3; break;
case 'Y' : Entier[i]4; break;
case 'Z' : Entier[i]5; break;
default : Entier[i]9; 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]='é'; 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;
} }
}
On 20 oct, 18:20, Mickaël Wolff <mickael.wo...@laposte.net> wrote:
darkwall_37 wrote:
> 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.
Il y a de nombreuses remarques faire sur ton code. Le premier est
que ton exemple ne compile pas. Au-del de cet trange en-tete windows.h
(:D), il manque la fonction CharToOem. mais le pire mon avis, est le
manque de commentaire, et l'absence d'intelligibilit du nom des
fonctions : on se demande ce qu'elles font. D'autres voueraient aux
G monies l'absence de tout code de controle des erreurs sur les
fonctions d'aquisition de ressources (malloc, fopen).
Mais j'insiste sur l'expression de ton code et de commentaires : o n
ne comprend pas ce que tu veux faire, et c'est donc difficile de
comprendre les erreurs que tu fais.
> 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 ?
'a' est un entier. Les litt raux de caract res sont fondamentaleme nt
des entiers cours. Donc tu peux crire :
int charasint = (int) 'a' ;
En ce qui concerne les caract res d'ASCII tendu, a d pend entre
autre du jeu de caract res que tu utilises pour crire ton code, et du
jeu de caract re du fichier traduit.
> 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 ?
Oui mais non, c'est pas tr s adroit. Tu peux caster (en comprenant le
m canisme sous-jacent), et utiliser les fonctions d di es (atoint,
isalpha, etc).
Mais au fait, pourquoi tu traduit les char en int ?
--
Micka l Wolff aka Lupus Michaelishttp://lupusmic.org
J'ai un fichier texte (ouverture avec notepad).
Je rentre une quelconque chaine de caractères ( encodage ASCII Etendu
des caractères ).
Je la récupère dans un tableau de type char.
Une première fonction me retourne un tableau d'entiers contenant la
valeur décimale correspondante du code ASCII étendu
Une seconde fonction de "cryptage" modifie mon tableau d'entiers.
Une troisième fonction me retourne un tableau de type char contenant
la nouvelle chaine de caractères du aux nouvelles valeurs décimales
modifiées par la fonction précédentes.
L'entrée et le résultat sont affichés dans l'invite de commande.
Mon problème étant que je souhaiterais savoir comment faire pour
sauver dans un tableau de type char tous les caractères de la table
ASCII étendue pour ne pas avoir à le faire manuellement ?
Je me souvenais que 202 correspondait au caractère é. Je me suis donc
dis qu'avec une boucle, une fonction de convertion de base 10 à base 8
je pourrais remplir un tableau de type char de la forme ASCII[256]=
{' ',...,'377'};
Mais cela ne fonctionne apparemment pas.
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=%dn",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 );
// On donne la valeur décimale correspondante au caractère
CharToInt ( Raw, taille, RawToAscii );
// On effectue l'opération de cryptage
Encryption ( RawToAscii, taille, AsciiToEncrytp );
// On cherche le nouveau caractère correspondant à la valeur
décimale
MethodeEncryption( AsciiToEncrytp, taille, Encrypted );
darkwall_37 wrote: > 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.
Il y a de nombreuses remarques faire sur ton code. Le premier est que ton exemple ne compile pas. Au-del de cet trange en-tete windows.h (:D), il manque la fonction CharToOem. mais le pire mon avis, est le manque de commentaire, et l'absence d'intelligibilit du nom des fonctions : on se demande ce qu'elles font. D'autres voueraient aux G monies l'absence de tout code de controle des erreurs sur les fonctions d'aquisition de ressources (malloc, fopen).
Mais j'insiste sur l'expression de ton code et de commentaires : o n ne comprend pas ce que tu veux faire, et c'est donc difficile de comprendre les erreurs que tu fais.
> 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 ?
'a' est un entier. Les litt raux de caract res sont fondamentaleme nt des entiers cours. Donc tu peux crire : int charasint = (int) 'a' ;
En ce qui concerne les caract res d'ASCII tendu, a d pend entre autre du jeu de caract res que tu utilises pour crire ton code, et du jeu de caract re du fichier traduit.
> 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 ?
Oui mais non, c'est pas tr s adroit. Tu peux caster (en comprenant le m canisme sous-jacent), et utiliser les fonctions d di es (atoint, isalpha, etc).
Mais au fait, pourquoi tu traduit les char en int ?
-- Micka l Wolff aka Lupus Michaelishttp://lupusmic.org
J'ai un fichier texte (ouverture avec notepad). Je rentre une quelconque chaine de caractères ( encodage ASCII Etendu des caractères ). Je la récupère dans un tableau de type char. Une première fonction me retourne un tableau d'entiers contenant la valeur décimale correspondante du code ASCII étendu Une seconde fonction de "cryptage" modifie mon tableau d'entiers. Une troisième fonction me retourne un tableau de type char contenant la nouvelle chaine de caractères du aux nouvelles valeurs décimales modifiées par la fonction précédentes. L'entrée et le résultat sont affichés dans l'invite de commande.
Mon problème étant que je souhaiterais savoir comment faire pour sauver dans un tableau de type char tous les caractères de la table ASCII étendue pour ne pas avoir à le faire manuellement ? Je me souvenais que 202 correspondait au caractère é. Je me suis donc dis qu'avec une boucle, une fonction de convertion de base 10 à base 8 je pourrais remplir un tableau de type char de la forme ASCII[256]= {' ',...,'377'}; Mais cela ne fonctionne apparemment pas.
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=%dn",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 ); // On donne la valeur décimale correspondante au caractère CharToInt ( Raw, taille, RawToAscii ); // On effectue l'opération de cryptage Encryption ( RawToAscii, taille, AsciiToEncrytp ); // On cherche le nouveau caractère correspondant à la valeur décimale MethodeEncryption( AsciiToEncrytp, taille, Encrypted );
void CharToInt( char *Chaine, int Taille, int *Entier ) {
int i=0; for ( i ; i<Taille ; i++ ) {
char c=Chaine[i]; switch ( c ) {
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;
case 'é' : Entier[i]; break;
case 'B' : Entier[i]; break;
case 'C' : Entier[i]; break;
case 'D' : Entier[i]; break;
case 'E' : Entier[i]; break;
case 'F' : Entier[i]; break;
case 'G' : Entier[i]; break;
case 'H' : Entier[i]; break;
case 'I' : Entier[i]; break;
case 'J' : Entier[i]; break;
case 'K' : Entier[i] ; break;
case 'L' : Entier[i]!; break;
case 'M' : Entier[i]"; break;
case 'N' : Entier[i]#; break;
case 'O' : Entier[i]$; break;
case 'P' : Entier[i]%; break;
case 'Q' : Entier[i]&; break;
case 'R' : Entier[i]'; break;
case 'S' : Entier[i](; break;
case 'T' : Entier[i]); break;
case 'U' : Entier[i]0; break;
case 'V' : Entier[i]1; break;
case 'W' : Entier[i]2; break;
case 'X' : Entier[i]3; break;
case 'Y' : Entier[i]4; break;
case 'Z' : Entier[i]5; break;
default : Entier[i]9; 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]='é'; 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;
} }
}
Benoit Izac
Bonjour,
le 20/10/2009 à 10:26, Lucas Levrel a écrit dans le message :
L'encodage utilisé est défini par le système d'exploitation. Pour Windows je ne sais pas où. Pour Linux c'est la variable $LANG qui le fait indirectement.
Pour UNIX, plus généralement, c'est LC_CTYPE précisément (LANG modifie LC_CTYPE seulement s'il n'est pas défini ou s'il est vide).
le 20/10/2009 à 10:26, Lucas Levrel a écrit dans le message
<Pine.LNX.4.64.0910201021140.4710@coulomb.univ-paris12.fr> :
L'encodage utilisé est défini par le système d'exploitation. Pour
Windows je ne sais pas où. Pour Linux c'est la variable $LANG qui le
fait indirectement.
Pour UNIX, plus généralement, c'est LC_CTYPE précisément (LANG modifie
LC_CTYPE seulement s'il n'est pas défini ou s'il est vide).
le 20/10/2009 à 10:26, Lucas Levrel a écrit dans le message :
L'encodage utilisé est défini par le système d'exploitation. Pour Windows je ne sais pas où. Pour Linux c'est la variable $LANG qui le fait indirectement.
Pour UNIX, plus généralement, c'est LC_CTYPE précisément (LANG modifie LC_CTYPE seulement s'il n'est pas défini ou s'il est vide).
le 20/10/2009 à 10:26, Lucas Levrel a écrit dans le message :
> L'encodage utilisé est défini par le système d'exploitation. Pour > Windows je ne sais pas où. Pour Linux c'est la variable $LANG qui le > fait indirectement.
Pour UNIX, plus généralement, c'est LC_CTYPE précisément (LANG mo difie LC_CTYPE seulement s'il n'est pas défini ou s'il est vide).
On 20 oct, 19:05, Benoit Izac <use.reply...@INVALID.ADDRESS> wrote:
Bonjour,
le 20/10/2009 à 10:26, Lucas Levrel a écrit dans le message
<Pine.LNX.4.64.0910201021140.4...@coulomb.univ-paris12.fr> :
> L'encodage utilisé est défini par le système d'exploitation. Pour
> Windows je ne sais pas où. Pour Linux c'est la variable $LANG qui le
> fait indirectement.
Pour UNIX, plus généralement, c'est LC_CTYPE précisément (LANG mo difie
LC_CTYPE seulement s'il n'est pas défini ou s'il est vide).
le 20/10/2009 à 10:26, Lucas Levrel a écrit dans le message :
> L'encodage utilisé est défini par le système d'exploitation. Pour > Windows je ne sais pas où. Pour Linux c'est la variable $LANG qui le > fait indirectement.
Pour UNIX, plus généralement, c'est LC_CTYPE précisément (LANG mo difie LC_CTYPE seulement s'il n'est pas défini ou s'il est vide).
J'ai un fichier texte (ouverture avec notepad). Je rentre une quelconque chaine de caractères ( encodage ASCII Etendu des caractères ).
Je suis désolé d'insister, mais tu devrais relire attentivement la réponse de Lucas : ASCII étendu ça ne veut *rien* dire ! Plus précisément, ça dit quels seront les caractères aux 128 premières positions, mais ça ne dit rien sur l'interprétation des valeurs de 128 à 255.
C'est vrai que les questions d'encodage sont techniques et pénibles au début, mais il faut vraiment voir ça sérieusement un jour. Si je ne me trompe pas, la norme C met en jeu deux encodages de caractères : celui de l'environnement de compilation, et celui de l'environnement d'exécution. Ces deux encodages peuvent être différents, il faut en tenir compte. Plus généralement, quand tu lis un fichier quelconque, sauf si tu as des informations spécifiques (en-têtes HTTP ou autre forme de méta-données) il peut être dans un encodage encore différent et il faut en tenir compte.
J'ai un fichier texte (ouverture avec notepad).
Je rentre une quelconque chaine de caractères ( encodage ASCII Etendu
des caractères ).
Je suis désolé d'insister, mais tu devrais relire attentivement la
réponse de Lucas : ASCII étendu ça ne veut *rien* dire ! Plus
précisément, ça dit quels seront les caractères aux 128 premières
positions, mais ça ne dit rien sur l'interprétation des valeurs de 128 à
255.
C'est vrai que les questions d'encodage sont techniques et pénibles au
début, mais il faut vraiment voir ça sérieusement un jour. Si je ne me
trompe pas, la norme C met en jeu deux encodages de caractères : celui
de l'environnement de compilation, et celui de l'environnement
d'exécution. Ces deux encodages peuvent être différents, il faut en
tenir compte. Plus généralement, quand tu lis un fichier quelconque,
sauf si tu as des informations spécifiques (en-têtes HTTP ou autre forme
de méta-données) il peut être dans un encodage encore différent et il
faut en tenir compte.
--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
J'ai un fichier texte (ouverture avec notepad). Je rentre une quelconque chaine de caractères ( encodage ASCII Etendu des caractères ).
Je suis désolé d'insister, mais tu devrais relire attentivement la réponse de Lucas : ASCII étendu ça ne veut *rien* dire ! Plus précisément, ça dit quels seront les caractères aux 128 premières positions, mais ça ne dit rien sur l'interprétation des valeurs de 128 à 255.
C'est vrai que les questions d'encodage sont techniques et pénibles au début, mais il faut vraiment voir ça sérieusement un jour. Si je ne me trompe pas, la norme C met en jeu deux encodages de caractères : celui de l'environnement de compilation, et celui de l'environnement d'exécution. Ces deux encodages peuvent être différents, il faut en tenir compte. Plus généralement, quand tu lis un fichier quelconque, sauf si tu as des informations spécifiques (en-têtes HTTP ou autre forme de méta-données) il peut être dans un encodage encore différent et il faut en tenir compte.
J'ai un fichier texte (ouverture avec notepad). Je rentre une quelconque chaine de caractères ( encodage ASCII Etendu des caractères ).
Il faut regarder dans la documentation de Notepad à quoi correspond concrètement ce concept. Si c'est de l'ASCII étendu ou une variante, ça sera simple. Si c'est de l'UTF-8, va falloir faire appel à une bibliothèque spécialisée.
Je la récupère dans un tableau de type char.
Jusque là, ça peut aller.
Une première fonction
Laquelle ? TailleFichier ?
me retourne un tableau d'entiers contenant la valeur décimale correspondante du code ASCII étendu
Je pense que tu n'as pas compris mon explication : ce que tu lis dans le fichier, ce *sont* les codes décimaux de tes caractères. Car les caractères sont des entiers. Cependant, parler de code décimal, octal ou dodecal n'a pas de sens, puisque ce sont les représentations litérales, compréhensibles, d'un même nombre.
char a = 'a' ; char b = 'b' ; printf("%d + %d = %dn", a, b, a + b) ; printf("%c + %c = %cn", a, b, a + b) ;
Une seconde fonction de "cryptage" modifie mon tableau d'entiers.
Non. Si tu penses à CharToInt, cette fonction ne modifie pas ton tableau initial, mais en remplit un autre. Ce n'est pas la même chose. De toute façon, je ne saisis toujours pas l'intérêt de cette manœuvre.
Une troisième fonction me retourne un tableau de type char
Il est impossible de retourner un tableau depuis une fonction, pas plus qu'il n'est possible d'en passer un en argument d'une fonction.
la nouvelle chaine de caractères du aux nouvelles valeurs décimales modifiées par la fonction précédentes.
On ne peut pas te suivre. Arrete de parler des fonctions comme si elles étaient anonymes. C'est le meilleur moyen pour perdre son monde et se tromper.
L'entrée et le résultat sont affichés dans l'invite de commande.
Non, sur la sortie standard. Ton programme n'a pas (vraiment) connaissance du fait que son père est un terminal au rabais.
Mon problème étant que je souhaiterais savoir comment faire pour sauver dans un tableau de type char tous les caractères de la table ASCII étendue pour ne pas avoir à le faire manuellement ?
Ben en lisant le fichier, c'est ce que tu fais. Si c'est un ASCII étendu.
Je me souvenais que 202 correspondait au caractère é. Je me suis donc dis qu'avec une boucle, une fonction de convertion de base 10 à base 8 je pourrais remplir un tableau de type char de la forme ASCII[256] > {' ',...,'377'}; Mais cela ne fonctionne apparemment pas.
C'est surtout qu'on se demande pourquoi tu cherche à faire si compliqué.
J'ai un fichier texte (ouverture avec notepad).
Je rentre une quelconque chaine de caractères ( encodage ASCII Etendu
des caractères ).
Il faut regarder dans la documentation de Notepad à quoi correspond
concrètement ce concept. Si c'est de l'ASCII étendu ou une variante, ça
sera simple. Si c'est de l'UTF-8, va falloir faire appel à une
bibliothèque spécialisée.
Je la récupère dans un tableau de type char.
Jusque là, ça peut aller.
Une première fonction
Laquelle ? TailleFichier ?
me retourne un tableau d'entiers contenant la
valeur décimale correspondante du code ASCII étendu
Je pense que tu n'as pas compris mon explication : ce que tu lis dans
le fichier, ce *sont* les codes décimaux de tes caractères. Car les
caractères sont des entiers. Cependant, parler de code décimal, octal ou
dodecal n'a pas de sens, puisque ce sont les représentations litérales,
compréhensibles, d'un même nombre.
char a = 'a' ;
char b = 'b' ;
printf("%d + %d = %dn", a, b, a + b) ;
printf("%c + %c = %cn", a, b, a + b) ;
Une seconde fonction de "cryptage" modifie mon tableau d'entiers.
Non. Si tu penses à CharToInt, cette fonction ne modifie pas ton
tableau initial, mais en remplit un autre. Ce n'est pas la même chose.
De toute façon, je ne saisis toujours pas l'intérêt de cette manœuvre.
Une troisième fonction me retourne un tableau de type char
Il est impossible de retourner un tableau depuis une fonction, pas
plus qu'il n'est possible d'en passer un en argument d'une fonction.
la nouvelle chaine de caractères du aux nouvelles valeurs décimales
modifiées par la fonction précédentes.
On ne peut pas te suivre. Arrete de parler des fonctions comme si
elles étaient anonymes. C'est le meilleur moyen pour perdre son monde et
se tromper.
L'entrée et le résultat sont affichés dans l'invite de commande.
Non, sur la sortie standard. Ton programme n'a pas (vraiment)
connaissance du fait que son père est un terminal au rabais.
Mon problème étant que je souhaiterais savoir comment faire pour
sauver dans un tableau de type char tous les caractères de la table
ASCII étendue pour ne pas avoir à le faire manuellement ?
Ben en lisant le fichier, c'est ce que tu fais. Si c'est un ASCII étendu.
Je me souvenais que 202 correspondait au caractère é. Je me suis donc
dis qu'avec une boucle, une fonction de convertion de base 10 à base 8
je pourrais remplir un tableau de type char de la forme ASCII[256] > {' ',...,'377'};
Mais cela ne fonctionne apparemment pas.
C'est surtout qu'on se demande pourquoi tu cherche à faire si compliqué.
J'ai un fichier texte (ouverture avec notepad). Je rentre une quelconque chaine de caractères ( encodage ASCII Etendu des caractères ).
Il faut regarder dans la documentation de Notepad à quoi correspond concrètement ce concept. Si c'est de l'ASCII étendu ou une variante, ça sera simple. Si c'est de l'UTF-8, va falloir faire appel à une bibliothèque spécialisée.
Je la récupère dans un tableau de type char.
Jusque là, ça peut aller.
Une première fonction
Laquelle ? TailleFichier ?
me retourne un tableau d'entiers contenant la valeur décimale correspondante du code ASCII étendu
Je pense que tu n'as pas compris mon explication : ce que tu lis dans le fichier, ce *sont* les codes décimaux de tes caractères. Car les caractères sont des entiers. Cependant, parler de code décimal, octal ou dodecal n'a pas de sens, puisque ce sont les représentations litérales, compréhensibles, d'un même nombre.
char a = 'a' ; char b = 'b' ; printf("%d + %d = %dn", a, b, a + b) ; printf("%c + %c = %cn", a, b, a + b) ;
Une seconde fonction de "cryptage" modifie mon tableau d'entiers.
Non. Si tu penses à CharToInt, cette fonction ne modifie pas ton tableau initial, mais en remplit un autre. Ce n'est pas la même chose. De toute façon, je ne saisis toujours pas l'intérêt de cette manœuvre.
Une troisième fonction me retourne un tableau de type char
Il est impossible de retourner un tableau depuis une fonction, pas plus qu'il n'est possible d'en passer un en argument d'une fonction.
la nouvelle chaine de caractères du aux nouvelles valeurs décimales modifiées par la fonction précédentes.
On ne peut pas te suivre. Arrete de parler des fonctions comme si elles étaient anonymes. C'est le meilleur moyen pour perdre son monde et se tromper.
L'entrée et le résultat sont affichés dans l'invite de commande.
Non, sur la sortie standard. Ton programme n'a pas (vraiment) connaissance du fait que son père est un terminal au rabais.
Mon problème étant que je souhaiterais savoir comment faire pour sauver dans un tableau de type char tous les caractères de la table ASCII étendue pour ne pas avoir à le faire manuellement ?
Ben en lisant le fichier, c'est ce que tu fais. Si c'est un ASCII étendu.
Je me souvenais que 202 correspondait au caractère é. Je me suis donc dis qu'avec une boucle, une fonction de convertion de base 10 à base 8 je pourrais remplir un tableau de type char de la forme ASCII[256] > {' ',...,'377'}; Mais cela ne fonctionne apparemment pas.
C'est surtout qu'on se demande pourquoi tu cherche à faire si compliqué.