Fread / fwrite

Signaler
Messages postés
22
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
25 août 2003
-
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006
-
Coucou les loulous,
je ne comprends pas :
j ecris dans un fichier un champs de bits et lorsque je veux le relire et l afficher a l ecran, il me l ecrit a l envers !!!!
voici mon code (pas bien complique):

//#include <vcl.h>
#include <string>
#include
#include <conio>
#include
#include <stdio.h>

//#pragma hdrstop

//#pragma argsused

using namespace std ;

typedef bitset<16> BitSet ; // champ de 16 bits
typedef bitset<32> BitSet2 ; // champ de 32 bits

int main(int argc, char* argv[])
{
string APID = "0000111000001011";
BitSet PACKET_ID(APID); // initialisation du champs de bits
cout << APID;

string COUNT = "1100000001001101" ;
BitSet PACKET_SEQ_CTRL(COUNT); // initialisation du champs de bits
cout << COUNT<< endl ;

FILE * f;

f = fopen("c:\\save\\seconde.dat","wb");
fwrite(&APID,2,1,f);
fwrite(&COUNT,2,1,f);
fclose(f);

BitSet2 cool; // declaration d'un new champs de bits

FILE * f2;
f2 = fopen("c:\\save\\seconde.dat","rb");
fread(&cool,4,1,f2);
fclose(f2);
cout << cool << endl;
return 0;
}

resultat :
00001110000010111100000001001101
01011111100111010000011101010100

cad pas dans le meme ordre avec meme un qui est dans l autre sens ????
que dois-je changer ?

merci,
BisouXXX

5 réponses

Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

fwrite(&APID,2,1,f);
fwrite(&COUNT,2,1,f);


Tu écris des pointeurs dans un fichier ??? Aucune chance de récupérer les informations sauvergardées dans ce fichier plus tard. Il faut écrire directement les chaînes de caractères.

Kaid
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

FILE * f;

f = fopen("c:\\save\\seconde.dat","wb");
fwrite(&APID.c_str(),2,1,f);
fwrite(&COUNT.c_str(),2,1,f);
fclose(f);

non!? sinon, .data

~(.:: NitRic ::.)~
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Idem, tu stockes toujours un pointeur. En plus les pointeurs sous Windows sont codés sur 4 octects et non 2, erreur que je n'ai pas vu hier.

fwrite(APID.c_str(),APID.length(),1,f);
fwrite(COUNT.c_str(),COUNT.length(),1,f);


Enfin en C++ autant utiliser les streams pour manipuler les fichiers.

Kaid
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

Kaid, .c_str() renvoie un char*, ok, pointeur, mais c pas l'adresse qui va être enregistré, c ce qui ce trouve à cette adresse ...

En passant, plutôt que d'écrire ce genre de message, n'écrit rien.

sur un forum c'est: Question/Réponse
dans ton cas c'est plutôt: Question/Question

FILE * f;

f = fopen("c:\\save\\seconde.dat","wb");
fwrite(&APID,sizeof(char),1,f);
fwrite(&COUNT,sizeof(char),1,f);
fclose(f);


!?

Kaid, si tu as mieux, dit lui donc comment faire!
un 'char' est codé sur 4octets

~(.:: NitRic ::.)~
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

T'as un problème ? Je pense honnêtement que oui mais je ne vois pas bien lequel ...

- Aucune de tes solutions ne fonctionnent.
- Un char est codé sur 1 octect, un pointeur sur 4.
- Je n'ai jamais posté une seule question sur le forum, j'y réponds simplement.
- Je ne t'ai rien demandé.

En passant, plutôt que d'écrire ce genre de message, pratique le C++.

Kaid