<?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[LZW Komprimierung - 10 signifikante Bits in eine Binärdatei schreiben.]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>ich muss die einzelnen Codes, die ich durch eine LZW-Komprimierung erhalte, in eine Binärdatei schreiben.</p>
<p>Der Aufgabe nach sollen die 10 signifikanten Bit in die Datei geschrieben werden. Der Code liegt derzeit als Int vor.</p>
<p>Wir wurden in der Uni in C++ sozusagen ins kalte Wasser geworfen und ich weiß an diesem Punkt einfach nicht weiter, was zu machen ist, bzw. wie es zu verstehen ist.</p>
<p>Was mache ich denn mit einem Int (bspw. 101), um die 10 signifikanten Bit in die Binärdatei zu schreiben?</p>
<p>Bin gar nicht auf fertige Lösung aus, Denkanstöße und Tipps wären toll.</p>
<p>Danke Euch vorab.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/329148/lzw-komprimierung-10-signifikante-bits-in-eine-binärdatei-schreiben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 01:13:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/329148.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 Nov 2014 11:57:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to LZW Komprimierung - 10 signifikante Bits in eine Binärdatei schreiben. on Mon, 10 Nov 2014 11:57:09 GMT]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>ich muss die einzelnen Codes, die ich durch eine LZW-Komprimierung erhalte, in eine Binärdatei schreiben.</p>
<p>Der Aufgabe nach sollen die 10 signifikanten Bit in die Datei geschrieben werden. Der Code liegt derzeit als Int vor.</p>
<p>Wir wurden in der Uni in C++ sozusagen ins kalte Wasser geworfen und ich weiß an diesem Punkt einfach nicht weiter, was zu machen ist, bzw. wie es zu verstehen ist.</p>
<p>Was mache ich denn mit einem Int (bspw. 101), um die 10 signifikanten Bit in die Binärdatei zu schreiben?</p>
<p>Bin gar nicht auf fertige Lösung aus, Denkanstöße und Tipps wären toll.</p>
<p>Danke Euch vorab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2426772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2426772</guid><dc:creator><![CDATA[Fischi2k]]></dc:creator><pubDate>Mon, 10 Nov 2014 11:57:09 GMT</pubDate></item><item><title><![CDATA[Reply to LZW Komprimierung - 10 signifikante Bits in eine Binärdatei schreiben. on Mon, 10 Nov 2014 12:57:58 GMT]]></title><description><![CDATA[<p>Da man keine einzelnen Bits, sondern nur Zeichen schreiben kann, musst du deinen Strom von 10-Bit-Worten in 8-Bit-Häppchen zerteilen:</p>
<p>z.B.:<br />
012345678901234567890123456789012345678901234567890123456789.....<br />
012345670123456701234567012345670123456701234567012345670123.....</p>
<p>Beim Schreiben des ersten 10-Bit-Wortes kannst du also nur 8 Bit schreiben und musst die anderen 2 Bit puffern. Wenn das nächste 10-Bit-Wort ankommt, kannst du davon 6 Bit nehmen und mit dem Puffer zusammen wieder ein Zeichen voll machen, der Puffer enthält nun 4 Bit. Und so weiter.</p>
<p>Du musst entscheiden (das ist möglicherweise durch das Dateiformat vorgegeben), welche Bits du von den 10 Bit zuerst wegschreibst, die oberen oder die unteren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2426795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2426795</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 10 Nov 2014 12:57:58 GMT</pubDate></item><item><title><![CDATA[Reply to LZW Komprimierung - 10 signifikante Bits in eine Binärdatei schreiben. on Mon, 10 Nov 2014 22:10:05 GMT]]></title><description><![CDATA[<p>Bashar hat es schon beschrieben wie es geht. IMHO ist es aber auch für jemanden, der C++ kann, die Umsetzung dessen vielleicht gar nicht so trivial, wie es am Anfang scheint.<br />
Ich habe mich mal dran versucht:</p>
<pre><code>void save10as8( std::ostream&amp; out, int* src, unsigned size )
{
    int* const srcEnd = src + size;
    int bits = 10;  // 'bits' gibt an, wie viele Bits zu schreiben sind
    while( src != srcEnd )
    {
        char byte;  // 1 Byte := 8Bit
        if( bits &lt; 8 )
        {
            byte = (*src &lt;&lt; (8 - bits)) &amp; 0xFF;
            bits += 2;
            if( ++src != srcEnd )
            {
                byte |= (*src &gt;&gt; bits) &amp; 0xFF;
            }
        }
        else
        {
            bits -= 8;
            byte = (*src &gt;&gt; bits) &amp; 0xFF;
            if( bits == 0 )
            {
                ++src;
                bits = 10;
            }
        }
        out.write( &amp;byte, 1 ); // 8Bit schreiben
    }
}
</code></pre>
<p>dieser Code schreibt 'size' 10Bit-Integer 8Bit-weise weg. Beginnend mit den höher wertigen Bits. Aufgerufen wird er z.B. so:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;

int main()
{
    using namespace std;
    int data[] = { 0x3ff, 0x000, 0x155, 0x2AA }; // 10Bit-Integer hier nur zur Demo
    ofstream file( &quot;comprim.dat&quot;, ios_base::binary );
    save10as8( file, data, sizeof(data)/sizeof(*data) );
    return 0;
}
</code></pre>
<p>Fischi2k schrieb:</p>
<blockquote>
<p>Was mache ich denn mit einem Int (bspw. 101), ...</p>
</blockquote>
<p>bin mir gar nicht so sicher, ob Du die Erklärung von SeppJ <a href="http://www.c-plusplus.net/forum/p2426708#2426708" rel="nofollow">in Deinem anderen Thread</a> verstanden hast <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Nur zur Klarstellung, jeder Int-Wert oben sollte im Intervall von [0..1023] bzw. [0x0..0x3FF] bzw. [0%0..0%1111111111] liegen, was ohne jede Konvertierung immer das gleiche ist!</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2426901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2426901</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Mon, 10 Nov 2014 22:10:05 GMT</pubDate></item></channel></rss>