[C++] Sérialisation binaire

Sérialisation binaire [C++] - C++ - Programmation

Marsh Posté le 26-07-2004 à 01:09:30    

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...
Reply

Marsh Posté le 26-07-2004 à 01:09:30   

Reply

Marsh Posté le 26-07-2004 à 08:33:59    

(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)

Reply

Marsh Posté le 26-07-2004 à 08:34:52    

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 !
Reply

Marsh Posté le 26-07-2004 à 08:51:39    

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)

Reply

Marsh Posté le 26-07-2004 à 08:52:36    

:jap:


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 26-07-2004 à 12:31:37    

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...
Reply

Marsh Posté le 26-07-2004 à 12:44:10    

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

Reply

Marsh Posté le 26-07-2004 à 12:57:29    

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


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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed