Cast un nombre resultat de fgetc() en char

Fermé
noobuxtu Messages postés 89 Date d'inscription mardi 12 avril 2011 Statut Membre Dernière intervention 13 septembre 2011 - Modifié par noobuxtu le 11/09/2011 à 21:50
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 14 sept. 2011 à 20:58
Bonjour,

je cherche desesperemment comment convertir un int en char ( mais vraiment ! je ne veux pas du tout l'afficher avec printf ou sprintf ).

Mon problème se presente de la manière suivante :

je lis dans un fichier caractere par caractere avec la fonction fgetc() de la manière suivante ( tant que le fichier ne renvoit pas EOF ) :
carac_actuel = fgetc(fichier);

Seulement je voudrais faire un teste tout les 6 caracteres, pour cela je dois stocker dans une chaine les 6 caracteres actuel, faire le test, la vider puis recommencer ...

Seulement pour cela il faudrait que je puisse stocker le caractere_actuel de fgetc dans une chaine de longeur 7 ( 6 caractes plus un NULL ), seulement si je fais :
chaine_actuel_de_six_carac[0] = fgetc(fichier);
et bien j'obtiens une erreur de compile : invalid initializer .. normal car fgetc renvoit un char sous sa forme entière ( un int ) alors que dois-je faire pour stocker le resultat de fgetc() dans un tableau de char ?


Merci d'avance !

J'ajoute qu'aucun poste ( parmis les 10 que jai vu ) ne mont donné de réponse !

Je precise aussi que fgetc renvoit un unsigned char convertit en int. Moi je veux convertir ce int en un VRAI unsigned char.


A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
11 sept. 2011 à 23:28
Bonjour,

Je ne suis pas sûr d'avoir bien compris le problème.
Pourrais-tu être plus précis en donnant un exemple ? (que contient le fichier par exemple, et que souhaites-tu que ta variable contienne ?)

Cdlt,
0
noobuxtu Messages postés 89 Date d'inscription mardi 12 avril 2011 Statut Membre Dernière intervention 13 septembre 2011 1
Modifié par noobuxtu le 12/09/2011 à 18:04
Salut !!

Merci de t'interesser à mon cas :), le fichier contient en fait du texte crypté ( mon programme est un algo de cryptage très simple : une table ( aleatoire ) est generee pour chaque caracteres.

Chaque caracteres ( e.g a ) est remplacé par une combinaison de 6 chiffres, lettres ou caracteres speciaux ( par exemple 0xDf@%% pour la lettre "a" ).

L'encryption est parfaitement implémenté mais je ne peux pas decrypte ( ce sur quoi je trvail ... ).

Monprog --encrypt [filename] crypte le fichier demandé.

Maintenant, il faut que je cree l'option --decrypt. Pour cela je dois lire dans le fichier crypté et ma variable doit contenir 6 caracteres ( je dois lire le fichier 6 lettres par 6 lettres ) puis avec un série de teste déjà implémenté la chaine de 6 caracteres ( lettres ou autre ) seront transformé en vrai l"lettre" ou chiffre dans le fichier [filename].decrypt.

Donc ma chaine chaine_actuel[] doit contenir 6 caracteres de fgetc() ( tout les 6 caracteres represente un vrai caractere ( non crypté ).

Peut être existe-t-il une fonction permettant de lire chaine par chaine ( ou on pourrait spécifier le nombre de caractere de cette chaine ) ce qui contournerait le problème ...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
12 sept. 2011 à 20:12
Effectivement, il y a des fonctions qui sont plus adaptées dans ton cas.
Je te conseille donc de faire : char chaine_actuel[7]; (ne pas oublier le '\0' final).
Ensuite, il te reste plus qu'à lire par bloc de 6 avec : fgets(chaine_actuel, sizeof chaine_actuel, fichier). fgets renverra NULL lorsque tu seras en fin de fichier.

Cela répond à ta question ?
0
noobuxtu Messages postés 89 Date d'inscription mardi 12 avril 2011 Statut Membre Dernière intervention 13 septembre 2011 1
Modifié par noobuxtu le 13/09/2011 à 18:57
Malheureusement non :(, c'est ce que j'essais actuellement ( j'ai trouvé en faisant man fgetc() ).

Mon code est ainsi mais il ne lit pas 7 caracteres par 7 caractere ...

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

int main() {    
        FILE* encrypt_file = NULL;    
        FILE* decrypt_file = NULL;    

        encrypt_file = fopen("encrypt_file", "r");    
        decrypt_file = fopen("file_decrypted", "w");    

        if (encrypt_file != NULL) {    

                    

                  char chaine_actuelle[7] = "";    


                  while (fgets(chaine_actuelle, 7, encrypt_file) != NULL) { // NE LIS PAS TOUT LE FICHIER 7 PAR 7 :((    


                          fgets(chaine_actuelle, 7, encrypt_file);    
                          printf("%s\n", chaine_actuelle);    

                    }     



                   fclose(encrypt_file);    
                   fclose(decrypt_file);    
        }    
}


Déjà il ne lit pas tout le fichier ... ( il en manque .. ) et en plus la chaine_actuelle est parfois moins longue que 7 ( parfois de 3 ou 2 ... ). Seule la première chaine lu est une chaine de 7 caracteres ...

Par exemple si mon fichier contient ça :
0xgfff00xllOPP


Mon prog affiche ça ....................... :
00xllO
PP


Non seulement il n'affiche pas 7 par 7 mais en plus il affiche dans un ordre improbable ( comme si il faisait des gotos dans le fichier :p ).
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
Modifié par fiddy le 14/09/2011 à 20:59
Bonsoir,
Normal, qu'il ne lise pas 7 caractères par 7 caractères.
Tu as demandé de lire 6 par 6.
Si tu souhaites 7 par 7, il faut mettre : char chaine_actuel[8];
0