Fread / fwrite

cs_helena123 Messages postés 22 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 25 août 2003 - 22 août 2003 à 16:21
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 - 23 août 2003 à 15:54
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

cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
22 août 2003 à 19:52
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
0
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
23 août 2003 à 04:43
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 ::.)~
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
23 août 2003 à 10:01
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
0
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
23 août 2003 à 15:27
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 ::.)~
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
23 août 2003 à 15:54
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
0
Rejoignez-nous