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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Sérialisation binaire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Sérialisation binaire

n°805974
xterminhat​e
Si vis pacem, para bellum.
Posté le 26-07-2004 à 01:09:30  profilanswer
 

Voici mon code...

Code :
  1. struct toto {
  2. void serialisation_binaire( ofstream& fichier_destination ) const;
  3. WORD  a;
  4. DWORD b;
  5. DWORD c;
  6. DWORD d;
  7. DWORD e;
  8. DWORD f;
  9. DWORD g;
  10. WORD  h;
  11. WORD  i;
  12. /***/ };
  13. void toto::serialisation_binaire( ofstream& fichier_destination ) const {
  14. fichier_destination.write( (char*)&a, 2 );
  15. fichier_destination.write( (char*)&b, 4 );
  16. fichier_destination.write( (char*)&c, 4 );
  17. fichier_destination.write( (char*)&d, 4 );
  18. fichier_destination.write( (char*)&e, 4 );
  19. fichier_destination.write( (char*)&f, 4 );
  20. fichier_destination.write( (char*)&g, 4 );
  21. fichier_destination.write( (char*)&h, 2 );
  22. fichier_destination.write( (char*)&i, 2 );
  23. /***/
  24. }


 
Dans certain cas d'utilisation, le fichier produit par l'opération de sérialisation echoue bizarrement : des octets supplémentaires se glissent dans le fichier binaire un peu n'importe où....
 
Des idées qui expliqueraient le pb ?


---------------
Cordialement, Xterm-in'Hate...
mood
Publicité
Posté le 26-07-2004 à 01:09:30  profilanswer
 

n°805995
Taz
bisounours-codeur
Posté le 26-07-2004 à 08:33:59  profilanswer
 

(char*)&a
 
c'est quoi ces conneries ?
 
toi t'es sous windows, ouvre en binaire.
 
si tu ne crains pas le padding, tu peux carrément écrire this (mais ça ne marche que si *this est un POD)

n°805996
kadreg
profil: Utilisateur
Posté le 26-07-2004 à 08:34:52  profilanswer
 

Taz a écrit :

ça ne marche que si *this est un POD


 
C'est quoi un POD ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°805997
Taz
bisounours-codeur
Posté le 26-07-2004 à 08:51:39  profilanswer
 

Plain Old Data.
 
une structure/classe composée uniquement de types de bases ou de POD et sans membres virtuels. Bref tout ce que tu peux faire en C avec des struct et qui est sérialisable surement en  binaire (tant qu'on reste sur la même machine, après des problèmes peuvent apparaitre)

n°805998
kadreg
profil: Utilisateur
Posté le 26-07-2004 à 08:52:36  profilanswer
 

:jap:


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°806244
xterminhat​e
Si vis pacem, para bellum.
Posté le 26-07-2004 à 12:31:37  profilanswer
 

Ok merci, le problème disparait en ouvrant binaire. Pour le cast, je vois pas comment faire autrement. read/write attend un char*.


---------------
Cordialement, Xterm-in'Hate...
n°806259
Taz
bisounours-codeur
Posté le 26-07-2004 à 12:44:10  profilanswer
 

je parlais du cast C
 

Code :
  1. template<typename T>
  2. inline std::ostream& raw_write(std::ostream &os, const T &t)
  3. { return os.write( reinterpret_cast<const char*>(&t), sizeof t ); }


 
pour faire simple

n°806270
xterminhat​e
Si vis pacem, para bellum.
Posté le 26-07-2004 à 12:57:29  profilanswer
 

Bien, je n'avais pas saisi l'interet du reinterpret. Maintenant que j'ai un exemple, c'est mieux.


---------------
Cordialement, Xterm-in'Hate...

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Sérialisation binaire

 

Sujets relatifs
ET binairematrice binaire
lire dans un fichier binaire en hexa (débutant)Conversion d'un chiffre décimal en binaire en C ?
[C++] Serialisation d'une liste d'objets dérivésproblème de conversion d'un hexadécimal en binaire !
binaire en c++comment envoyer du binaire
[VB] Connection HTTP pour récupérer un fichier binaireArbre binaire, trouver la profondeur d une node.
Plus de sujets relatifs à : [C++] Sérialisation binaire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR