<?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[bitoperationen mit char und ofstream]]></title><description><![CDATA[<p>hallo,<br />
ich bin gerade ein wenig dabei mit bitoperatoren rumzuspielen...<br />
ich wollte ein simples komprimierungsprogramm schreiben, dessen prinzip darauf beruht, lediglich 32 zeichen darzustellen und somit pro buchstabe lediglich 5 bit benötigt.<br />
daraus folgt, dass man für 8 buchstaben nur 5 chars benötigt.<br />
mit meinem programm wollte ich nun eine datei mit dem inhalt &quot;abc&quot; komprimieren.<br />
heraus kam eine datei mit 0 byte inhalt</p>
<p>ich vermute, dass es beim schreiben oder bei der zuweisung der bits an die chars der fehler auftritt...</p>
<p>könnt ihr mir sagen, ob das folgende korrekt ist?</p>
<pre><code class="language-cpp">//bool b[40] enthält die 5 bits der kodierten zeichen
	char ch[5];
	for (int i=0; i&lt;5; i++){ch[i] = '\0';}
	for (int i=0, j=0, k=7; j&lt;40; j++, k--)
	{
		if (k == -1){k = 7;}
		i = j/8;
		ch[i] += (b[j]&lt;&lt;k);//ch[i] bekommt seine 8 bits zugewiesen (links angefangen)
	}

	ofstream write;
	write.open(pathwrite, ios_base::out|ios_base::app);
	write &lt;&lt; ch;//ch wird geschrieben
	write.close();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/270221/bitoperationen-mit-char-und-ofstream</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 12:51:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270221.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Jul 2010 13:53:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to bitoperationen mit char und ofstream on Thu, 08 Jul 2010 13:53:35 GMT]]></title><description><![CDATA[<p>hallo,<br />
ich bin gerade ein wenig dabei mit bitoperatoren rumzuspielen...<br />
ich wollte ein simples komprimierungsprogramm schreiben, dessen prinzip darauf beruht, lediglich 32 zeichen darzustellen und somit pro buchstabe lediglich 5 bit benötigt.<br />
daraus folgt, dass man für 8 buchstaben nur 5 chars benötigt.<br />
mit meinem programm wollte ich nun eine datei mit dem inhalt &quot;abc&quot; komprimieren.<br />
heraus kam eine datei mit 0 byte inhalt</p>
<p>ich vermute, dass es beim schreiben oder bei der zuweisung der bits an die chars der fehler auftritt...</p>
<p>könnt ihr mir sagen, ob das folgende korrekt ist?</p>
<pre><code class="language-cpp">//bool b[40] enthält die 5 bits der kodierten zeichen
	char ch[5];
	for (int i=0; i&lt;5; i++){ch[i] = '\0';}
	for (int i=0, j=0, k=7; j&lt;40; j++, k--)
	{
		if (k == -1){k = 7;}
		i = j/8;
		ch[i] += (b[j]&lt;&lt;k);//ch[i] bekommt seine 8 bits zugewiesen (links angefangen)
	}

	ofstream write;
	write.open(pathwrite, ios_base::out|ios_base::app);
	write &lt;&lt; ch;//ch wird geschrieben
	write.close();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1923327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923327</guid><dc:creator><![CDATA[sudo rm -rf]]></dc:creator><pubDate>Thu, 08 Jul 2010 13:53:35 GMT</pubDate></item><item><title><![CDATA[Reply to bitoperationen mit char und ofstream on Thu, 08 Jul 2010 14:16:32 GMT]]></title><description><![CDATA[<p>Funktioniert bei mir ganz wunderbar. Zumindest wenn ich dein Programm zu was compilierbarem ergänze:</p>
<pre><code class="language-cpp">bool b[40] = {1,1,0,0,1,1,0,0,
                0,0,1,1,0,0,1,1,
                1,0,1,0,1,0,1,0,
                1,1,1,1,1,1,1,1,
                0,0,0,0,0,0,0,0
  };
    char ch[5];
    for (int i=0; i&lt;5; i++){ch[i] = '\0';}
    for (int i=0, j=0, k=7; j&lt;40; j++, k--)
    {
        if (k == -1){k = 7;}
        i = j/8;
        ch[i] += (b[j]&lt;&lt;k);//ch[i] bekommt seine 8 bits zugewiesen (links angefangen)
    }

    cout&lt;&lt;static_cast&lt;int&gt;(ch[0])&lt;&lt;endl;
    cout&lt;&lt;static_cast&lt;int&gt;(ch[1])&lt;&lt;endl;
    cout&lt;&lt;static_cast&lt;int&gt;(ch[2])&lt;&lt;endl;
    cout&lt;&lt;static_cast&lt;int&gt;(ch[3])&lt;&lt;endl;
    cout&lt;&lt;static_cast&lt;int&gt;(ch[4])&lt;&lt;endl;
</code></pre>
<p>Kommen bei dir vielleicht Nullzeichen raus? Die würden nämlich beim Schreiben mittels Operator &lt;&lt; das Ende eines C-Strings markieren.</p>
<p>P.S.: Wenn du std::bitset benutzt, kannst du dir alle Bitoperationen sparen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923343</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 08 Jul 2010 14:16:32 GMT</pubDate></item><item><title><![CDATA[Reply to bitoperationen mit char und ofstream on Thu, 08 Jul 2010 14:29:28 GMT]]></title><description><![CDATA[<p>1.) Dateim im Binaermodus oeffnen und mittels write schreiben.<br />
2.) Du kannst nur Blockweise schreiben. Der kleinste Block ist aber 1 Byte gross. D.h. du musst dir was ueberlegen, wie du bei z.B. zwei Buchstaben die 3 Bit des zweiten Buchstaben noch in das erste Byte des ersten schiebst.<br />
3.) Neben std::bitset gibts es auch noch std::vector&lt;bool&gt;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923349</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 08 Jul 2010 14:29:28 GMT</pubDate></item><item><title><![CDATA[Reply to bitoperationen mit char und ofstream on Thu, 08 Jul 2010 14:53:32 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>2.) Du kannst nur Blockweise schreiben. Der kleinste Block ist aber 1 Byte gross. D.h. du musst dir was ueberlegen, wie du bei z.B. zwei Buchstaben die 3 Bit des zweiten Buchstaben noch in das erste Byte des ersten schiebst.</p>
</blockquote>
<p>das hab ich schon gelöst.</p>
<p>seppj:<br />
mit cout funzt es bei mir auch, nur nicht mit<br />
ofstream write;<br />
write.open(blub);<br />
write &lt;&lt; ch;<br />
write.close();</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923357</guid><dc:creator><![CDATA[sudo rm -rf]]></dc:creator><pubDate>Thu, 08 Jul 2010 14:53:32 GMT</pubDate></item><item><title><![CDATA[Reply to bitoperationen mit char und ofstream on Thu, 08 Jul 2010 15:07:54 GMT]]></title><description><![CDATA[<blockquote>
<p>das hab ich schon gelöst.</p>
</blockquote>
<p>Dann lies dir nochmal 1.) durch fuer deine anderen Probleme. Wo versetzt du deinen ofstream in Binaermodus? Wo nutzt du die Methode write?</p>
<p>PS: Methoden werden mit Verben benannt, Objekte mit Nomen. Ein Objekt mit write zu betiteln ist eher unguenstig. Besser ist vielleicht file oder out oder ... .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923362</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 08 Jul 2010 15:07:54 GMT</pubDate></item><item><title><![CDATA[Reply to bitoperationen mit char und ofstream on Thu, 08 Jul 2010 15:17:43 GMT]]></title><description><![CDATA[<p>ahh, ich denke es klappt!!!<br />
dankE!!!</p>
<p>worum geht das denn mit out.write(ch, 5) aber nicht mit out &lt;&lt; ch ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923366</guid><dc:creator><![CDATA[sudo rm -rf]]></dc:creator><pubDate>Thu, 08 Jul 2010 15:17:43 GMT</pubDate></item><item><title><![CDATA[Reply to bitoperationen mit char und ofstream on Thu, 08 Jul 2010 15:40:18 GMT]]></title><description><![CDATA[<p>Weil ch als char* behandelt wird, d.h. er schreibt nich die 5 chars, sonder ab dem ersten, bis das erste \0 kommt. <code>out &lt;&lt; ch[0] &lt;&lt; ch[1] &lt;&lt; ...;</code> hätte sicher auch geklappt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923382</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Thu, 08 Jul 2010 15:40:18 GMT</pubDate></item><item><title><![CDATA[Reply to bitoperationen mit char und ofstream on Thu, 08 Jul 2010 15:43:15 GMT]]></title><description><![CDATA[<p>und wenn in ch[1] Steuerzeichen enthalten sind ... Mit &lt;&lt; schreibt man Text, mit write schreibt man Binaerdaten. Ist halt so. Eine kleine Inkonsistenz im Standard.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923384</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 08 Jul 2010 15:43:15 GMT</pubDate></item><item><title><![CDATA[Reply to bitoperationen mit char und ofstream on Thu, 08 Jul 2010 15:58:57 GMT]]></title><description><![CDATA[<p>vielen dank!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1923389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1923389</guid><dc:creator><![CDATA[sudo rm -rf]]></dc:creator><pubDate>Thu, 08 Jul 2010 15:58:57 GMT</pubDate></item></channel></rss>