Cast un nombre resultat de fgetc() en char
noobuxtu
Messages postés
93
Statut
Membre
-
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
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 ) :
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 :
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.
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:
- Cast un nombre resultat de fgetc() en char
- Resultat foot - Télécharger - Vie quotidienne
- Nombre de jours entre deux dates excel - Guide
- Vlc cast to tv - Guide
- Nombre facile - Télécharger - Outils professionnels
- Installer chrome cast - Guide
3 réponses
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,
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,
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 ...
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 ...
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 ?
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 ?
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 ...
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 :
Mon prog affiche ça ....................... :
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 ).
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 ).