<?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 &#x2F; Enum werden unterschiedlich behandelt?]]></title><description><![CDATA[<p>Hallo,</p>
<p>schreibe gerade ein kleines Tool zur Netzwerkkommunikation. Dazu versende ich structs und enums Bsp:</p>
<pre><code class="language-cpp">enum PacketType{
 TYP1, TYP2}

enum SenderType{
  SENDER1, SENDER2}

struct MyData{
    int nSize;
    PacketType paket;
    SenderType typ;
}
</code></pre>
<p>das ganze wird dann als Mydata versendet und auch wieder in einer MyData Variable empfangen. das int wird noch richtig &quot;wückgewandelt&quot; allerdings stimmen die Werte in PacketType und SenderType nicht.</p>
<p>Es handelt sich um einen Borlandcompiler auf Senderseite und eine MS auf Empfängerseite.</p>
<p>Jemand ne Idee?</p>
<p>LG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/252533/struct-enum-werden-unterschiedlich-behandelt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 10:29:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/252533.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Oct 2009 09:12:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Struct &#x2F; Enum werden unterschiedlich behandelt? on Wed, 21 Oct 2009 09:12:54 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>schreibe gerade ein kleines Tool zur Netzwerkkommunikation. Dazu versende ich structs und enums Bsp:</p>
<pre><code class="language-cpp">enum PacketType{
 TYP1, TYP2}

enum SenderType{
  SENDER1, SENDER2}

struct MyData{
    int nSize;
    PacketType paket;
    SenderType typ;
}
</code></pre>
<p>das ganze wird dann als Mydata versendet und auch wieder in einer MyData Variable empfangen. das int wird noch richtig &quot;wückgewandelt&quot; allerdings stimmen die Werte in PacketType und SenderType nicht.</p>
<p>Es handelt sich um einen Borlandcompiler auf Senderseite und eine MS auf Empfängerseite.</p>
<p>Jemand ne Idee?</p>
<p>LG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795656</guid><dc:creator><![CDATA[sirchillalot]]></dc:creator><pubDate>Wed, 21 Oct 2009 09:12:54 GMT</pubDate></item><item><title><![CDATA[Reply to Struct &#x2F; Enum werden unterschiedlich behandelt? on Wed, 21 Oct 2009 09:22:20 GMT]]></title><description><![CDATA[<p>Was genau kommt denn an? Zeig mal einen Hexdump von dem was kommt und dem was du erwartest.</p>
<p>Achtung, blindes Rumgestochere: ich hatte vor vielen Jahren mal bei einem Borland-Compiler das Problem, dass enums nur so groß wie nötig waren, statt so groß wie ein int.<br />
Füg mal bei den enums einen Dummywert hinzu, um int-Größe zu erzwingen:</p>
<pre><code class="language-cpp">enum PacketType{
 TYP1, TYP2, TYP_SIZE_DUMMY = 0xffffffff }

enum SenderType{
  SENDER1, SENDER2, SENDER_SIZE_DUMMY = 0xffffffff }
</code></pre>
<p>Edit: und dafür sorgen, dass das Padding auf beiden Seiten übereinstimmt, in den Compilereinstellungen oder mit<a href="http://msdn.microsoft.com/en-us/library/2e70t5y1%28VS.80%29.aspx" rel="nofollow"> <code>#pragma pack</code> </a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795663</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Wed, 21 Oct 2009 09:22:20 GMT</pubDate></item><item><title><![CDATA[Reply to Struct &#x2F; Enum werden unterschiedlich behandelt? on Wed, 21 Oct 2009 09:38:58 GMT]]></title><description><![CDATA[<p>Registrierter Troll schrieb:</p>
<blockquote>
<p>Was genau kommt denn an? Zeig mal einen Hexdump von dem was kommt und dem was du erwartest.</p>
<p>Achtung, blindes Rumgestochere: ich hatte vor vielen Jahren mal bei einem Borland-Compiler das Problem, dass enums nur so groß wie nötig waren, statt so groß wie ein int.<br />
Füg mal bei den enums einen Dummywert hinzu, um int-Größe zu erzwingen:</p>
<pre><code class="language-cpp">enum PacketType{
 TYP1, TYP2, TYP_SIZE_DUMMY = 0xffffffff }

enum SenderType{
  SENDER1, SENDER2, SENDER_SIZE_DUMMY = 0xffffffff }
</code></pre>
<p>Edit: und dafür sorgen, dass das Padding auf beiden Seiten übereinstimmt, in den Compilereinstellungen oder mit<a href="http://msdn.microsoft.com/en-us/library/2e70t5y1%28VS.80%29.aspx" rel="nofollow"> <code>#pragma pack</code> </a>.</p>
</blockquote>
<p>das mit den Dummywerten wars schon. Vielen vielen Dank! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795681</guid><dc:creator><![CDATA[sirchillalot]]></dc:creator><pubDate>Wed, 21 Oct 2009 09:38:58 GMT</pubDate></item><item><title><![CDATA[Reply to Struct &#x2F; Enum werden unterschiedlich behandelt? on Wed, 21 Oct 2009 10:25:58 GMT]]></title><description><![CDATA[<p>Beim Borland-Compiler kann man auch mit einem Compiler-Switch erzwingen, daß enums immer die Größe eines 'int' haben (jedoch ist ja eigentlich der MS Compiler nicht standardkonform, da dessen 'enum' immer die Größe eines 'int' hat).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795698</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 21 Oct 2009 10:25:58 GMT</pubDate></item><item><title><![CDATA[Reply to Struct &#x2F; Enum werden unterschiedlich behandelt? on Wed, 21 Oct 2009 10:40:38 GMT]]></title><description><![CDATA[<p>Th69 schrieb:</p>
<blockquote>
<p>(jedoch ist ja eigentlich der MS Compiler nicht standardkonform, da dessen 'enum' immer die Größe eines 'int' hat).</p>
</blockquote>
<p>Beides ist konform, weil der Standard keine Mindestgröße vorschreibt.</p>
<blockquote>
<p>It is implementation-defined which integral type is used as the underlying type for an enumeration except that the underlying type shall not be larger than int unless the value of an enumerator cannot fit in an int or unsigned int.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1795705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795705</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Wed, 21 Oct 2009 10:40:38 GMT</pubDate></item><item><title><![CDATA[Reply to Struct &#x2F; Enum werden unterschiedlich behandelt? on Wed, 21 Oct 2009 10:55:49 GMT]]></title><description><![CDATA[<p>Überhaupt sollte man sich nicht auf ein bestimmtes Klassen-Layout verlassen. Das ist nicht standardisiert und kann sich von Rechner zu Rechner und Compiler zu Compiler unterscheiden, inklusive solcher Dinge wie die <a href="http://de.wikipedia.org/wiki/Byte-Reihenfolge" rel="nofollow">Byte-Reihenfolge</a>.</p>
<p>Wenn man an einem größtenteils &quot;portablen&quot; Netzwerkprotokoll interessiert ist, baut man sich die Nachrichten per Hand in einem unsigned char Array zusammen und schreibt dann noch so etwas</p>
<pre><code class="language-cpp">#include &lt;climits&gt;
#if CHAR_BIT != 8
#error &quot;Diese Implementierung ist auf 8bit-Bytes ausgelegt&quot;
#endif
</code></pre>
<p>um &quot;ungewöhnliche&quot; Fälle abzufangen, die eventuell eine Sonderbehandlung benötigten.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795712</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Wed, 21 Oct 2009 10:55:49 GMT</pubDate></item></channel></rss>