<?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[Endianess]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe gerade folgenden Code gefunden zum Test, ob die Maschine Little oder Big Endian ist:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
main () {
int i = 0x12345678;
if (*(char *)&amp;i == 0x12)
printf (&quot;Big endian\n&quot;);
else if (*(char *)&amp;i == 0x78)
    		printf (&quot;Little endian\n&quot;);
}
</code></pre>
<p>Das heisst also, C++ speichert das Bytemuster von Variablen immer im Format der Maschine ab und hat nicht ein eigenes?<br />
Was mir nicht klar ist: Wenn ich mit Bitoperatoren rumhantiere, z.B.:</p>
<pre><code class="language-cpp">int foo = ..
int bar = foo &amp; (1 &lt;&lt; 31)
</code></pre>
<p>dann wuerde ich mit diesem Code auf einer Big Endian Maschine doch andere Ergebnisse kriegen als auf einer Little Endian Maschine? Muss ich dann alle Bitoperationen per #ifdef schuetzen? <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/287310/endianess</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 12:06:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287310.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 May 2011 07:40:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 07:40:42 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe gerade folgenden Code gefunden zum Test, ob die Maschine Little oder Big Endian ist:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
main () {
int i = 0x12345678;
if (*(char *)&amp;i == 0x12)
printf (&quot;Big endian\n&quot;);
else if (*(char *)&amp;i == 0x78)
    		printf (&quot;Little endian\n&quot;);
}
</code></pre>
<p>Das heisst also, C++ speichert das Bytemuster von Variablen immer im Format der Maschine ab und hat nicht ein eigenes?<br />
Was mir nicht klar ist: Wenn ich mit Bitoperatoren rumhantiere, z.B.:</p>
<pre><code class="language-cpp">int foo = ..
int bar = foo &amp; (1 &lt;&lt; 31)
</code></pre>
<p>dann wuerde ich mit diesem Code auf einer Big Endian Maschine doch andere Ergebnisse kriegen als auf einer Little Endian Maschine? Muss ich dann alle Bitoperationen per #ifdef schuetzen? <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068868</guid><dc:creator><![CDATA[LittleBigPlanet]]></dc:creator><pubDate>Thu, 26 May 2011 07:40:42 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 07:56:11 GMT]]></title><description><![CDATA[<p>[quote=&quot;LittleBigPlanet&quot;]<br />
Das heisst also, C++ speichert das Bytemuster von Variablen immer im Format der Maschine ab und hat nicht ein eigenes?[/cpp] richtig.</p>
<blockquote>
<p>Was mir nicht klar ist: Wenn ich mit Bitoperatoren rumhantiere,<br />
dann wuerde ich mit diesem Code auf einer Big Endian Maschine doch andere Ergebnisse kriegen als auf einer Little Endian Maschine?</p>
</blockquote>
<p>Nein. Wenn der bitshift über byte-Grenzen hinausgeht, gehts zum Byte mit der nächst kleineren Adresse. Beim BE ist das in der Notation links, beim LE in der Notation rechts.</p>
<pre><code class="language-cpp">short s = 0xFF; //bzw. 0x00FF - BE: 00 FF - LE: FF 00
s &lt;&lt;=2; //d.h. 0x03FC - BE: 03 FC - LE: FC 03
</code></pre>
<p>Man kann es sich alternativ &quot;physikalisch&quot; auch so vorstellen, dass die bytes immer gleich im Speicher liegen, BE aber von links nach rechts adressiert und LE von rechts nach links:</p>
<p>64 bit integer 0xFF vor und nach bitshift um 2:</p>
<pre><code>|0   .... BE ...     7|
00 00 00 00 00 00 00 FF 
00 00 00 00 00 00 03 FC
|7    ... LE ...     0|
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2068876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068876</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 26 May 2011 07:56:11 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 09:01:28 GMT]]></title><description><![CDATA[<p>Dann koennte ich es mir vereinfacht auch so vorstellen:<br />
Wenn ich direkt byteweise den Speicher lese, ist die Endianess wichtig.</p>
<p>Wenn ich auf der Variablen mit Bit-Operatoren arbeite, kann ich mir einfach vorstellen, dass so gerechnet wird wie man es aufm Blatt Papier machen wuerde (quasi Big Endian). Die Operation ist quasi virtualisiert.</p>
<p>Passt das so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068912</guid><dc:creator><![CDATA[LittleBigPlanet]]></dc:creator><pubDate>Thu, 26 May 2011 09:01:28 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 10:12:04 GMT]]></title><description><![CDATA[<p>Übrigens ist dein Code zu 100% C und kein bisschen C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068949</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 26 May 2011 10:12:04 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 10:59:32 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Übrigens ist dein Code zu 100% C und kein bisschen C++.</p>
</blockquote>
<p>Hier geht es aber nicht um den geposteten Code, also ist das eigentlich irrelevant.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068978</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 26 May 2011 10:59:32 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 11:02:41 GMT]]></title><description><![CDATA[<p>_matze schrieb:</p>
<blockquote>
<p>Hier geht es aber nicht um den geposteten Code, also ist das eigentlich irrelevant.</p>
</blockquote>
<p>Mir geht es darum, dass der Code auf einem ISO-Compiler für C++ nicht kompilieren darf!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068979</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 26 May 2011 11:02:41 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 11:07:23 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>_matze schrieb:</p>
<blockquote>
<p>Hier geht es aber nicht um den geposteten Code, also ist das eigentlich irrelevant.</p>
</blockquote>
<p>Mir geht es darum, dass der Code auf einem ISO-Compiler für C++ nicht kompilieren darf!</p>
</blockquote>
<p>Ja, ich habe auch gesehen, dass der Rückgabewert von main fehlt, aber mir geht es darum, das es nicht darum geht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068982</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 26 May 2011 11:07:23 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 11:10:17 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>_matze schrieb:</p>
<blockquote>
<p>Hier geht es aber nicht um den geposteten Code, also ist das eigentlich irrelevant.</p>
</blockquote>
<p>Mir geht es darum, dass der Code auf einem ISO-Compiler für C++ nicht kompilieren darf!</p>
</blockquote>
<p>Mal abgesehen vom fehlenden int vor der main ist alles okay. Auch für C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2068988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068988</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 26 May 2011 11:10:17 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 11:14:16 GMT]]></title><description><![CDATA[<p>Es ist einfach so: hier wird LE/BE diskutiert. Der Eingangscode ist hierzu irrelevant. Es ist also unnötig, zu beweisen, wie gut man zwischen bösem C und &quot;wahrem&quot; C++ unterscheiden kann. <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/2068993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2068993</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 26 May 2011 11:14:16 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 13:11:00 GMT]]></title><description><![CDATA[<p>Was soll jetzt diese unnoetige Korinthenkackerei von EOutOfResources?</p>
<p>Passt meine Sichtweise aus Posting 2?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069114</guid><dc:creator><![CDATA[LittleBigPlanet]]></dc:creator><pubDate>Thu, 26 May 2011 13:11:00 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 13:18:11 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>_matze schrieb:</p>
<blockquote>
<p>Hier geht es aber nicht um den geposteten Code, also ist das eigentlich irrelevant.</p>
</blockquote>
<p>Mir geht es darum, dass der Code auf einem ISO-Compiler für C++ nicht kompilieren darf!</p>
</blockquote>
<p>Ist das so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069124</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 26 May 2011 13:18:11 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 13:19:06 GMT]]></title><description><![CDATA[<p>LittleBigPlanet schrieb:</p>
<blockquote>
<p>Was soll jetzt diese unnoetige Korinthenkackerei von EOutOfResources?</p>
</blockquote>
<p>Sowas kommt vor hier im Forum. Einfach ignorieren, schlimmstenfalls füttert man sonst schnell irgendwelche Trolle.</p>
<blockquote>
<p>Passt meine Sichtweise aus Posting 2?</p>
</blockquote>
<p>Grob, ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069126</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 26 May 2011 13:19:06 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 13:21:24 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>EOutOfResources schrieb:</p>
<blockquote>
<p>_matze schrieb:</p>
<blockquote>
<p>Hier geht es aber nicht um den geposteten Code, also ist das eigentlich irrelevant.</p>
</blockquote>
<p>Mir geht es darum, dass der Code auf einem ISO-Compiler für C++ nicht kompilieren darf!</p>
</blockquote>
<p>Ist das so?</p>
</blockquote>
<p>Na ja, das stimmt schon, denke ich, oder nicht? main muss int als Rückgabewert haben, und default-int gibt's nicht in C++. Ach, ist ja auch egal, und bringt LittleBigPlanet nicht weiter...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069130</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 26 May 2011 13:21:24 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 13:25:07 GMT]]></title><description><![CDATA[<p>Dabei habe ich jetzt auch direkt eine Frage. Wenn die Shifoperatoren unabhängig von der Endianess arbeiten, tun das dann auch die restlichen Bitoperatoren oder sind die Endianessabhängig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069132</guid><dc:creator><![CDATA[GroßerEnder]]></dc:creator><pubDate>Thu, 26 May 2011 13:25:07 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 13:26:05 GMT]]></title><description><![CDATA[<p>_matze schrieb:</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<p>Ist das so?</p>
</blockquote>
<p>Na ja, das stimmt schon, denke ich, oder nicht? main muss int als Rückgabewert haben, und default-int gibt's nicht in C++. Ach, ist ja auch egal, und bringt LittleBigPlanet nicht weiter...</p>
</blockquote>
<p>Ich denke mal M.E. zielt drauf ab, dass der Standard Extensions für Compiler erlaubt, die anderweitig ungültigen Code gültig machen dürfen. Aber wie du sagts, hilft das dem Fragesteller nicht.</p>
<p>Back to topic.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069134</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 26 May 2011 13:26:05 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 17:03:55 GMT]]></title><description><![CDATA[<p>GroßerEnder schrieb:</p>
<blockquote>
<p>Wenn die Shifoperatoren unabhängig von der Endianess arbeiten, tun das dann auch die restlichen Bitoperatoren oder sind die Endianessabhängig?</p>
</blockquote>
<p>Bei <code>&amp;</code> , <code>|</code> , <code>^</code> und <code>~</code> wird ja Bit für Bit unabhängig verknüpft, daher spielt die Endianess keine Rolle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069262</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 26 May 2011 17:03:55 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 17:40:29 GMT]]></title><description><![CDATA[<p>Das heißt dieser Code</p>
<pre><code class="language-cpp">unsigned high = 42;
unsigned char low = 23;
unsigned short both = static_cast&lt;unsigned short&gt;(high &lt;&lt; 8 | low);
std::cout &lt;&lt; both &lt;&lt; std::endl;
</code></pre>
<p>ist doch Plattformunabhängig?<br />
(Aus nem anderen Thread kopiert)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069283</guid><dc:creator><![CDATA[GroßerEnder]]></dc:creator><pubDate>Thu, 26 May 2011 17:40:29 GMT</pubDate></item><item><title><![CDATA[Reply to Endianess on Thu, 26 May 2011 19:38:13 GMT]]></title><description><![CDATA[<p>So gut wie. Das Einzige, was IMHO schief gehen kannst, ist, dass ein Short zu klein sein kann, um zwei Chars aufzunehmen. Aber dafür bräuchte man schon mal mindestens 9-Bit-Chars. Sprich: Es geht für normale Programmierer immer gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2069373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2069373</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 26 May 2011 19:38:13 GMT</pubDate></item></channel></rss>