Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4837 connectés 

 


Dernière réponse
Sujet : [c++] Probleme avec fstream...
Taz on peut biensur faire directement avec un reinterpret_cast<char*>(&i);

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Taz on peut biensur faire directement avec un reinterpret_cast<char*>(&i);
Taz dégueux
 

Code :
  1. [07:26:03][pts/5][/tmp][#7][&1] ? 1
  2. benoit@ibook >>> cat write.cpp
  3. #include <fstream>
  4. #include <cstring>
  5. int main()
  6. {
  7.   std::ofstream out("out", std::ios::binary);
  8.   int i = 456;
  9.   char buffer[sizeof i];
  10.   std::memcpy(buffer, &i, sizeof i);
  11.   out.write(buffer, sizeof i);
  12. }
  13. [07:27:24][pts/5][/tmp][#8][&1]
  14. benoit@ibook >>> g++ -Wall -std=c++98 write.cpp
  15. [07:27:30][pts/5][/tmp][#9][&1]
  16. benoit@ibook >>> ./a.out && hexdump -C out
  17. 00000000  00 00 01 c8                                       |....|
  18. 00000004

du83 Voilà une solution que j'utilise et qui marche au poil !
 
int A_Ecrire_dans_le_fichier;
char Sert_seulement_pour_L_adresse;
 
int main(int argc, char *argv[])
{
        A_Ecrire_dans_le_fichier=456;
        ofstream fichier;
        fichier.open ("test.dat", ios::binary);
        fichier.write (&Sert_seulement_pour_L_adresse - sizeof(A_Ecrire_dans_le_fichier), sizeof(A_Ecrire_dans_le_fichier));
        fichier.close ();
        return 0;
}
 
C'est tiré par les cheveux mais ça marche !
janoscoder ->toxin
en mode binary, typecaster un pointeur d'entier en pointeur d'octets marche. (et ce même avec des endians différents).
tgrx ben faut bien forcer les choses non ? tu vois une autre maniere ??
 
janoscoder > MAILMOITONRIBSTP
Toxin Un cast de (char *) sur un integer ? Ca ne marchera jamais ça.
janoscoder t'as essayé de faire par la suite un
f.setmode(filebuf::binary) ?
par la suite?
ptet que ça marche
tgrx Please help !
tgrx Bonjour a tous,
 
Mon compilateur (GCC) ecrit par defaut les int sous forme ASCII dans les streams.
 
ex :
ofstream f("test.dat", ios::binary);
f << (int) 456;
 
et donc dans le fichier j'ai la chaine "456". Tout a fait normal. Seulement moi j'aimerais bien qu'il les stocke sous forme binaire, 4 octets par int, comme ca ca facilite la relecture.
 
J'ai donc ecrit la fonction suivante (censee surchargee la fonction existante) :
 
ostream& operator << (ostream& out, const int & i)
{
  out.write((char*) &i, sizeof(int));
  return out;
}
 
Qui est censee fonctionner. Mais bizarrement le compilo s'en fout et utilise la fonction standard, et continue a ecrire en ASCII dans le fichier. Ou est la connerie ? :sarcastic:

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)