<?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[Struct als Bitfeld?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich muss aus einer Binärdatei Daten herausparsen. Das mache ich mittels Structs.</p>
<p>Nun mache ich es bisher so, dass ich mir ein entsprechendes Struct bastle und das dann auf die entsprechende Stelle in der Binärdatei referenziere. So geht das dann immer weiter, bis ich schließlich noch ein Struct mit Bitmasken habe.</p>
<p>Um mir das ganze etwas zu vereinfachen, hätte ich jetzt die Frage, ob ich ein Struct, das aus Bitfeldern besteht, in ein anderes Struct einbauen kann. Hat das dann auch die richtige Größe?</p>
<p>Als Beispiel nehmen wir mal an, ich möchte 6 Byte + 3 Bit an Daten aus der Binärdatei parsen:</p>
<p>struct B<br />
{<br />
unsigned int ElementA : 5;<br />
unsigned int ElementB : 3;<br />
unsigned int ElementC : 3;<br />
};</p>
<p>struct A<br />
{<br />
char ElementA[2];<br />
char ElementB[3];<br />
struct B;<br />
};</p>
<p>Würde das so funktionieren?</p>
<p>Danke!</p>
<p>Gruß</p>
<p>Shinzo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276167/struct-als-bitfeld</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 11:47:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276167.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 Oct 2010 08:01:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Struct als Bitfeld? on Thu, 28 Oct 2010 08:02:57 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich muss aus einer Binärdatei Daten herausparsen. Das mache ich mittels Structs.</p>
<p>Nun mache ich es bisher so, dass ich mir ein entsprechendes Struct bastle und das dann auf die entsprechende Stelle in der Binärdatei referenziere. So geht das dann immer weiter, bis ich schließlich noch ein Struct mit Bitmasken habe.</p>
<p>Um mir das ganze etwas zu vereinfachen, hätte ich jetzt die Frage, ob ich ein Struct, das aus Bitfeldern besteht, in ein anderes Struct einbauen kann. Hat das dann auch die richtige Größe?</p>
<p>Als Beispiel nehmen wir mal an, ich möchte 6 Byte + 3 Bit an Daten aus der Binärdatei parsen:</p>
<p>struct B<br />
{<br />
unsigned int ElementA : 5;<br />
unsigned int ElementB : 3;<br />
unsigned int ElementC : 3;<br />
};</p>
<p>struct A<br />
{<br />
char ElementA[2];<br />
char ElementB[3];<br />
struct B;<br />
};</p>
<p>Würde das so funktionieren?</p>
<p>Danke!</p>
<p>Gruß</p>
<p>Shinzo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971814</guid><dc:creator><![CDATA[RyoShinzo]]></dc:creator><pubDate>Thu, 28 Oct 2010 08:02:57 GMT</pubDate></item><item><title><![CDATA[Reply to Struct als Bitfeld? on Thu, 28 Oct 2010 09:56:24 GMT]]></title><description><![CDATA[<p>gabs da nicht sowas wie padding was einem da dazwischenfunzen kann oder gilt das nur für die Ablage im Speicher und nicht das lesen aus zB Dateien?</p>
<p>&lt;pirate&gt;<br />
Was genau macht</p>
<pre><code class="language-cpp">unsigned int ElementA : 5;
//                    ^^^ das hier?
</code></pre>
<p>?</p>
<p>&lt;/pirate&gt;</p>
<p>Ich würde jetzt denken das ist ein struct von 5 chars und 3 ints ... was denkt der Compiler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971819</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Thu, 28 Oct 2010 09:56:24 GMT</pubDate></item><item><title><![CDATA[Reply to Struct als Bitfeld? on Thu, 28 Oct 2010 08:49:11 GMT]]></title><description><![CDATA[<p>struct B kann gar nicht die richtige Größe haben, wie auch, mit 11 Bit?<br />
Der Compiler schiebt hier auf jeden Fall ein Padding ein, ich meine, irgendwo gelesen zu haben, dieses Padding geschieht bei Bitfeldern hinter den Membern, also nach ElementC werden 21 Bit eingeschoben.<br />
Per Default sieht auch A anders aus als angenommen.<br />
ElementA, Offset 0, Größe 2 -&gt; kein Padding<br />
ElementB, Offset 2, Größe 3 -&gt; Padding 1 Byte<br />
B b &lt;- muss natürlich so heißen, Offset 8, Größe 4.<br />
Mit #pragma pack(push,1) kann das Padding bei MSVC-Compilern auf 1 Byte gesenkt werden. Dann liegt b auch auf Offset 5 und A hat eine Größe von 9 Byte.<br />
Generell würde ich die Verwendung von Bitfeldern im Umgang mit Binärdateien vermeiden, stattdessen selbst alignte Strukturen verwenden oder ein passendes Verhalten beim Compiler einstellen.<br />
Du kannst ja mal soetwas</p>
<pre><code class="language-cpp">B b;
int i = 0xFF;
*(&amp;b) = *((B*)(&amp;i));
</code></pre>
<p>probieren, und schauen, wie es sich auf die Member von b auswirkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971830</guid><dc:creator><![CDATA[Vicious Falcon]]></dc:creator><pubDate>Thu, 28 Oct 2010 08:49:11 GMT</pubDate></item><item><title><![CDATA[Reply to Struct als Bitfeld? on Thu, 28 Oct 2010 17:13:40 GMT]]></title><description><![CDATA[<p>padreigh schrieb:</p>
<blockquote>
<pre><code class="language-cpp">unsigned int ElementA : 5;
//                    ^^^ das hier?
</code></pre>
</blockquote>
<p>*psuh*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1972053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1972053</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Thu, 28 Oct 2010 17:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to Struct als Bitfeld? on Thu, 28 Oct 2010 17:28:32 GMT]]></title><description><![CDATA[<p>padreigh schrieb:</p>
<blockquote>
<p>padreigh schrieb:</p>
<blockquote>
<pre><code class="language-cpp">unsigned int ElementA : 5;
//                    ^^^ das hier?
</code></pre>
</blockquote>
<p>*psuh*</p>
</blockquote>
<p>Such nach Bitfeld bei Google. <a href="http://www.cpp-tutor.de/cpp/le08/bitfelder.html" rel="nofollow">http://www.cpp-tutor.de/cpp/le08/bitfelder.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1972056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1972056</guid><dc:creator><![CDATA[........]]></dc:creator><pubDate>Thu, 28 Oct 2010 17:28:32 GMT</pubDate></item><item><title><![CDATA[Reply to Struct als Bitfeld? on Thu, 28 Oct 2010 17:35:22 GMT]]></title><description><![CDATA[<p>padreigh schrieb:</p>
<blockquote>
<p>padreigh schrieb:</p>
<blockquote>
<pre><code class="language-cpp">unsigned int ElementA : 5;
//                    ^^^ das hier?
</code></pre>
</blockquote>
<p>*psuh*</p>
</blockquote>
<p>Das ist, wie der Threadtitel ja schon vermuten lässt, ein bit-field. Unter dem Namen ElementA kann eine Variable von 5-Bit Größe angesprochen werden. Die Idee dahinter ist, dass bei mehreren solcher Bitfelder platzoptimierter Code erzeugt wird, aber die Details sind implemenation defined.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1972058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1972058</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 28 Oct 2010 17:35:22 GMT</pubDate></item></channel></rss>