<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[boost::serialize und speichern einer Datei im Binärformat]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>ich möchte eine Datei erzeugen die ein struct wie im Beispiel angegeben enthält. Mein Ziel dabei ist, die Dateigröße gering zu halten.</p>
<p>Wenn ich nun das Prog. laufen lasse, erzeugt es eine Datei namens <em>filename</em> mit einer Größe von ~26K was mir viel zu groß erscheint. Ein Blick in die Datei zeigt den Ausschnitt</p>
<p><code>^@^D^H^D^H^A^@^@^@^@^@^@^@^@^G^@^@^@^@^@^@^@some id^@^@^@^@^@d^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@0000000000000000000‌​000000000000000000000000000000000000000000000000000000000000000000000000000000000‌​000000000000000000000000000000000000000000000000000000000000000000000000000000000‌​000000000000000000000000000000000000000000000000000000000000000000000000000^@^A^@‌​^@^@^@^@^@0</code></p>
<p>Mir erscheint das nicht als binäres Speicherformat. Vlt. liege ich falsch aber die Größe sollte bei ~256*100 bits + String + overhead sein, was etwa 3.1kb ergibt.</p>
<p>Gibt es einen Weg das Problem mit boost::serialize zu lösen?</p>
<p>Danke sehr</p>
<pre><code>#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;bitset&gt;
#include &lt;fstream&gt;
#include &lt;boost/serialization/string.hpp&gt;
#include &lt;boost/serialization/vector.hpp&gt;
#include &lt;boost/serialization/bitset.hpp&gt;
#include &lt;boost/archive/binary_oarchive.hpp&gt;

template&lt;size_t N&gt;
struct Example
{
  std::string id;
  std::vector&lt;std::bitset&lt;N&gt;&gt; bits;
};

template&lt;size_t N&gt;
Example&lt;N&gt; make_example()
{
  Example&lt;N&gt; example;

  example.id = &quot;some id&quot;;

  example.bits.resize(100);

  return example;
}
namespace boost
{
  namespace serialization
  {
    template&lt;typename Archive, size_t N&gt;
    void serialize ( Archive &amp; a
                   , Example&lt;N&gt; &amp; e
                   , const unsigned int version )
    {
        a &amp; e.id;
        a &amp; e.bits;
    }
  }
}

int main()
{
  auto example = make_example&lt;256&gt;();

  std::ofstream ofs(&quot;filename&quot;, std::ios::binary);

  boost::archive::binary_oarchive oa(ofs);

  oa &lt;&lt; example;

  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/338928/boost-serialize-und-speichern-einer-datei-im-binärformat</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 21:57:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338928.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Jul 2016 10:56:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::serialize und speichern einer Datei im Binärformat on Fri, 22 Jul 2016 10:56:37 GMT]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>ich möchte eine Datei erzeugen die ein struct wie im Beispiel angegeben enthält. Mein Ziel dabei ist, die Dateigröße gering zu halten.</p>
<p>Wenn ich nun das Prog. laufen lasse, erzeugt es eine Datei namens <em>filename</em> mit einer Größe von ~26K was mir viel zu groß erscheint. Ein Blick in die Datei zeigt den Ausschnitt</p>
<p><code>^@^D^H^D^H^A^@^@^@^@^@^@^@^@^G^@^@^@^@^@^@^@some id^@^@^@^@^@d^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@0000000000000000000‌​000000000000000000000000000000000000000000000000000000000000000000000000000000000‌​000000000000000000000000000000000000000000000000000000000000000000000000000000000‌​000000000000000000000000000000000000000000000000000000000000000000000000000^@^A^@‌​^@^@^@^@^@0</code></p>
<p>Mir erscheint das nicht als binäres Speicherformat. Vlt. liege ich falsch aber die Größe sollte bei ~256*100 bits + String + overhead sein, was etwa 3.1kb ergibt.</p>
<p>Gibt es einen Weg das Problem mit boost::serialize zu lösen?</p>
<p>Danke sehr</p>
<pre><code>#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;bitset&gt;
#include &lt;fstream&gt;
#include &lt;boost/serialization/string.hpp&gt;
#include &lt;boost/serialization/vector.hpp&gt;
#include &lt;boost/serialization/bitset.hpp&gt;
#include &lt;boost/archive/binary_oarchive.hpp&gt;

template&lt;size_t N&gt;
struct Example
{
  std::string id;
  std::vector&lt;std::bitset&lt;N&gt;&gt; bits;
};

template&lt;size_t N&gt;
Example&lt;N&gt; make_example()
{
  Example&lt;N&gt; example;

  example.id = &quot;some id&quot;;

  example.bits.resize(100);

  return example;
}
namespace boost
{
  namespace serialization
  {
    template&lt;typename Archive, size_t N&gt;
    void serialize ( Archive &amp; a
                   , Example&lt;N&gt; &amp; e
                   , const unsigned int version )
    {
        a &amp; e.id;
        a &amp; e.bits;
    }
  }
}

int main()
{
  auto example = make_example&lt;256&gt;();

  std::ofstream ofs(&quot;filename&quot;, std::ios::binary);

  boost::archive::binary_oarchive oa(ofs);

  oa &lt;&lt; example;

  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2503012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503012</guid><dc:creator><![CDATA[goran]]></dc:creator><pubDate>Fri, 22 Jul 2016 10:56:37 GMT</pubDate></item></channel></rss>