<?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[union: bytes ausgeben]]></title><description><![CDATA[<p>Simple Frage: Ist folgendes Programm korrekt?</p>
<pre><code class="language-cpp">union bsp
{
  int i;
  char bytes[sizeof(int)];
}test;

test.i=165;
for (int i=0; i&lt;sizeof(int); i++)
{
  std::cout &lt;&lt; &quot;Byte &quot; &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; test.bytes[i] &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>Die Ausgabe lautet:</p>
<pre><code>Byte 0: Ñ
Byte 1:
Byte 2:
Byte 3:
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/188261/union-bytes-ausgeben</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 02:17:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188261.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 29 Jul 2007 18:40:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 18:40:05 GMT]]></title><description><![CDATA[<p>Simple Frage: Ist folgendes Programm korrekt?</p>
<pre><code class="language-cpp">union bsp
{
  int i;
  char bytes[sizeof(int)];
}test;

test.i=165;
for (int i=0; i&lt;sizeof(int); i++)
{
  std::cout &lt;&lt; &quot;Byte &quot; &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; test.bytes[i] &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>Die Ausgabe lautet:</p>
<pre><code>Byte 0: Ñ
Byte 1:
Byte 2:
Byte 3:
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1334518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334518</guid><dc:creator><![CDATA[langeweile]]></dc:creator><pubDate>Sun, 29 Jul 2007 18:40:05 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 18:42:22 GMT]]></title><description><![CDATA[<p>Nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334520</guid><dc:creator><![CDATA[spannend]]></dc:creator><pubDate>Sun, 29 Jul 2007 18:42:22 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 18:43:24 GMT]]></title><description><![CDATA[<p>spannend schrieb:</p>
<blockquote>
<p>Nein.</p>
</blockquote>
<p>Why not?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334521</guid><dc:creator><![CDATA[langeweile]]></dc:creator><pubDate>Sun, 29 Jul 2007 18:43:24 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 18:47:43 GMT]]></title><description><![CDATA[<p>Bei was für einer Code-Page?</p>
<pre><code>Byte 0: �
Byte 1: 
Byte 2: 
Byte 3:
</code></pre>
<p>:p</p>
<p>(UTF8)</p>
<p>EDIT://<br />
Das Forum setzt hier den Code etwas um ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334524</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sun, 29 Jul 2007 18:47:43 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 18:44:49 GMT]]></title><description><![CDATA[<p>Bei unions darf man nur auf die Variable zugreifen die man zuletzt geschrieben hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334527</guid><dc:creator><![CDATA[spannend]]></dc:creator><pubDate>Sun, 29 Jul 2007 18:44:49 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 18:50:01 GMT]]></title><description><![CDATA[<p>darthdespotism schrieb:</p>
<blockquote>
<p>Bei was für einer Code-Page?</p>
</blockquote>
<p>850</p>
<blockquote>
<p>Bei unions darf man nur auf die Variable zugreifen die man zuletzt geschrieben hat.</p>
</blockquote>
<p>Wo steht's geschrieben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334530</guid><dc:creator><![CDATA[langeweile]]></dc:creator><pubDate>Sun, 29 Jul 2007 18:50:01 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 18:57:31 GMT]]></title><description><![CDATA[<p>langeweile schrieb:</p>
<blockquote>
<p>darthdespotism schrieb:</p>
<blockquote>
<p>Bei was für einer Code-Page?</p>
</blockquote>
<p>850</p>
</blockquote>
<p>ISO 8859-1 oder was? 850 sagt mir gar nichts.</p>
<blockquote>
<blockquote>
<p>Bei unions darf man nur auf die Variable zugreifen die man zuletzt geschrieben hat.</p>
</blockquote>
<p>Wo steht's geschrieben?</p>
</blockquote>
<p>Das ist eine Empfehlung, wenn man nicht weiß was man macht ;), vll ist der Trick mit den Unions auch nicht ganz der Weg für sauberen Code, valides C++ ist es aber allemal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334538</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sun, 29 Jul 2007 18:57:31 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 18:59:44 GMT]]></title><description><![CDATA[<blockquote>
<p>Bei unions darf man nur auf die Variable zugreifen die man zuletzt geschrieben hat.</p>
</blockquote>
<p>Wo steht's geschrieben?[/quote]</p>
<p><a href="http://c-plusplus.net/forum/viewtopic-var-t-is-186331-and-postdays-is-0-and-postorder-is-asc-and-start-is-10.html" rel="nofollow">http://c-plusplus.net/forum/viewtopic-var-t-is-186331-and-postdays-is-0-and-postorder-is-asc-and-start-is-10.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334541</guid><dc:creator><![CDATA[spannend]]></dc:creator><pubDate>Sun, 29 Jul 2007 18:59:44 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 19:05:10 GMT]]></title><description><![CDATA[<p>In der Registry (Win NT 5.1 SP2 de) steht nur Codepage 850...</p>
<p>@spannend:<br />
Ich hätte das gerne als Zitat aus 'nem guten Buch, im Stroustrup find ich nix...</p>
<p>Wie darf ich dann das hier verstehen? Irren sich etwa gleich mehrere Seiten?<br />
<a href="http://www.willemer.de/informatik/cpp/union.htm" rel="nofollow">http://www.willemer.de/informatik/cpp/union.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334542</guid><dc:creator><![CDATA[langeweile]]></dc:creator><pubDate>Sun, 29 Jul 2007 19:05:10 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 19:04:11 GMT]]></title><description><![CDATA[<p>spannend schrieb:</p>
<blockquote>
<blockquote>
<blockquote>
<p>Bei unions darf man nur auf die Variable zugreifen die man zuletzt geschrieben hat.</p>
</blockquote>
<p>Wo steht's geschrieben?</p>
</blockquote>
<p><a href="http://c-plusplus.net/forum/viewtopic-var-t-is-186331-and-postdays-is-0-and-postorder-is-asc-and-start-is-10.html" rel="nofollow">http://c-plusplus.net/forum/viewtopic-var-t-is-186331-and-postdays-is-0-and-postorder-is-asc-and-start-is-10.html</a></p>
</blockquote>
<p>interessant.</p>
<p>EDIT://</p>
<p>langeweile schrieb:</p>
<blockquote>
<p>In der Registry (Win NT 5.1 SP2 de) steht nur Codepage 850...</p>
<p>@spannend:<br />
Ich hätte das gerne als Zitat aus 'nem guten Buch, im Stroustrup find ich nix...</p>
</blockquote>
<p><a href="http://de.wikipedia.org/wiki/Codepage_850" rel="nofollow">http://de.wikipedia.org/wiki/Codepage_850</a></p>
<p>Danach passt auch das Zeichen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334545</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sun, 29 Jul 2007 19:04:11 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 19:06:03 GMT]]></title><description><![CDATA[<blockquote>
<p>EDIT://<br />
langeweile schrieb:<br />
In der Registry (Win NT 5.1 SP2 de) steht nur Codepage 850...</p>
<p>@spannend:<br />
Ich hätte das gerne als Zitat aus 'nem guten Buch, im Stroustrup find ich nix...</p>
<p><a href="http://de.wikipedia.org/wiki/Codepage_850" rel="nofollow">http://de.wikipedia.org/wiki/Codepage_850</a></p>
<p>Danach passt auch das Zeichen ...</p>
</blockquote>
<p>Danke, aber ist das jetzt wirklich kein gültiges C++?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334546</guid><dc:creator><![CDATA[langeweile]]></dc:creator><pubDate>Sun, 29 Jul 2007 19:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 19:08:48 GMT]]></title><description><![CDATA[<p>Nach HumeSikkins nicht, da ich den Standard nicht vorliegen habe kann ich da auch nicht mehr sagen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334549</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sun, 29 Jul 2007 19:08:48 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 20:31:33 GMT]]></title><description><![CDATA[<p>Soweit ich es erkenne, ist das ein Problem von 3.10[basic.lval]/15, 9.2[class.mem]/17 und 9.5[class.union]/1 (und in unserem Falle noch 3.9[basic.types]/4)<br />
Zunächst einmal muss unser union ein POD sein - dann gilt wegen 9.2/17 für alle Member mem1,mem2: (void*)&amp;mem1 == (void*)&amp;mem2<br />
Nach 9.5/1 existiert immer nur der Wert des zuletzt geschriebenen Members. Das heißt aber nicht, dass der Zugriff auf ein anderes Member <em>per se</em> fehlerhaft ist, sondern eben nur, dass ein Zugriff über ein anderes Member eben auf den <em>Wert</em> des zuletzt geschriebenen Members ist (9.5/1 sagt etwas über die Existenz von Werten, nicht die Existenz von Membern an sich). Damit kommen wir dann zu 3.10/15, das uns sagt, wann ein solches Aliasing nicht zwingend unzulässig ist. In diesem Thread haben wir es mit der letzten Alternative &quot;- a char or unsigned char type.&quot; zu tun und wegen 3.9/4 ist das nichts Anderes als der Zugriff auf die Objektrepräsentation des Wertes in i.<br />
In Shades Tutorial ist es etwas anders:</p>
<pre><code class="language-cpp">union Test
    {
      int Int; //Annahme: sizeof(int) == 4
      struct
      {
        char byte1;
        char byte2;
        char byte3;
        char byte4;
      } Bytes;
      //char bytes[4]; //so könnte man es auch machen (statt der struct)
      //man würde dann statt t.Bytes.byte1 einfach t.bytes[0] schreiben - das ist geschmackssache.
    };
</code></pre>
<p>Es ist tatsächlich keine Geschmackssache, denn byte2,byte3,byte4 sind nicht notwendig Alias auf die Objektrepräsentation von Int, selbst wenn sizeof(int)&gt;=4 ist. Das Verhalten kann dann undefiniert sein, je nach Layout von Bytes, welches durch die Implementation definiert wird.<br />
Das ist aber ein alter Streit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334616</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 29 Jul 2007 20:31:33 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 20:34:30 GMT]]></title><description><![CDATA[<p>Super, da hab ich wieder was gelern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334619</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sun, 29 Jul 2007 20:34:30 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Sun, 29 Jul 2007 20:44:19 GMT]]></title><description><![CDATA[<p>Wobei anzumerken wäre, dass einige Compiler (zumindest gcc) Schwierigkeiten mit solchem Aliasing haben - obwohl dem Standard nicht zu entnehmen ist, dass hier</p>
<pre><code class="language-cpp">union
{
    int i;
    char x[sizeof(int)];
};
i = 5;
cout &lt;&lt; x[0];
cout &lt;&lt; reinterpret_cast&lt;char&amp;&gt;(i);
</code></pre>
<p>ein Unterschied besteht - in beiden Fällen kommen wir auf unterschiedlichem Wege zur Anwendung von 3.10/15 - ist letztere Variante gemeinhin sicherer vor amoklaufenden Optimierern und wohl auch etwas offensichtlicher in der Semantik.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334622</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 29 Jul 2007 20:44:19 GMT</pubDate></item><item><title><![CDATA[Reply to union: bytes ausgeben on Mon, 30 Jul 2007 09:53:54 GMT]]></title><description><![CDATA[<p>Heißt das auf deutsch, dass mein Programm solange richtig ist, wie die union POD ist? (Sorry, aber diese Fachsprache ist ein bissl kompliziert... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1334821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1334821</guid><dc:creator><![CDATA[langeweile]]></dc:creator><pubDate>Mon, 30 Jul 2007 09:53:54 GMT</pubDate></item></channel></rss>