La serializzazione boost non funziona tra computer a 32 bit e 64 bit. Qualche altra libreria di serializzazione / compressione?

Sto cercando di usare la libreria boost per serializzare su macchine a 64 bit e de-serializzare su macchine a 32 bit. Tuttavia, sembra che non funzioni. (Io uso 1.57.0).

Se eseguo il codice seguente

boost::asio::streambuf buf; std::ostream os(&buf); boost::archive::binary_oarchive oa(os); printf("Buffer size %d\n",(int)buf.size()); 

L’uscita della macchina a 32 bit è 37 e l’uscita della macchina a 64 bit è 41 .

C’è qualche altra buona libreria di serializzazione che posso usare? Che ne dici di cereali ?

È fantastico se la libreria può fare anche la compressione (zlib / gzip, ecc.).

Funziona. Semplicemente non crea archivi compatibili. Se si desidera che si dovrebbe guardare l’implementazione di archivio che EOS ha fatto:

  • EOS Portable Archive

Puoi inserire l’archivio di Boost’s binary_ [io] con esso. Non c’è bisogno di cambiare nient’altro.


PS. Naturalmente, spiega anche i tuoi tipi in modo indipendente dall’architettura, naturalmente. Quindi uint32_t , non “ size_t`

Gli archivi binari creati da boost :: serialization non funzioneranno se si modifica l’architettura della macchina. Gli archivi di testo sono una buona opzione in questo scenario. Boost :: archive :: text_oarchive e boost :: archive :: text_iarchive possono essere utilizzati nello stesso modo ma sono sicuri su architetture e piattaforms. I dati sono scritti in un formato ASCII invece che in un formato binario, quindi ci sono trade off che dovranno essere indirizzati per il tuo scopo.

Consiglio di utilizzare “cereali” per questo scopo che potrebbe fornire la serializzazione JSON / XML.