<?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[Frage zur Umwandlung von 32 Bit Zahlen in 64 Bit Zahlen im Hinblick auf Endianess]]></title><description><![CDATA[<p>Hallo,<br />
gegeben seien 2 32 Bit Zahlen. Diese sollen in eine 64 Bit Zahl umgewandelt werden. (Ja, ich weis, ich könnte natürlich einfach shift benutzen, ich will aber folgenden code verwenden)</p>
<pre><code class="language-cpp">unsigned int Low;
unsigned int High;

unsigned int arr[2];

#ifdef LITTLE //little endian wird benutzt
arr[0] = High;
arr[1] = Low;
#elif BIG //big endian wird benutzt
arr[0] = Low;
arr[1] = High;
#endif

unsigned long long uint64;
memcpy(uint64, arr, sizeof(unsigned long long));
</code></pre>
<p>Ist das so korrekt (wenn man Middle Endian jetzt mal rauslässt)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256729/frage-zur-umwandlung-von-32-bit-zahlen-in-64-bit-zahlen-im-hinblick-auf-endianess</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 04:43:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256729.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Dec 2009 23:10:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zur Umwandlung von 32 Bit Zahlen in 64 Bit Zahlen im Hinblick auf Endianess on Wed, 16 Dec 2009 23:10:01 GMT]]></title><description><![CDATA[<p>Hallo,<br />
gegeben seien 2 32 Bit Zahlen. Diese sollen in eine 64 Bit Zahl umgewandelt werden. (Ja, ich weis, ich könnte natürlich einfach shift benutzen, ich will aber folgenden code verwenden)</p>
<pre><code class="language-cpp">unsigned int Low;
unsigned int High;

unsigned int arr[2];

#ifdef LITTLE //little endian wird benutzt
arr[0] = High;
arr[1] = Low;
#elif BIG //big endian wird benutzt
arr[0] = Low;
arr[1] = High;
#endif

unsigned long long uint64;
memcpy(uint64, arr, sizeof(unsigned long long));
</code></pre>
<p>Ist das so korrekt (wenn man Middle Endian jetzt mal rauslässt)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1823788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1823788</guid><dc:creator><![CDATA[Galter]]></dc:creator><pubDate>Wed, 16 Dec 2009 23:10:01 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Umwandlung von 32 Bit Zahlen in 64 Bit Zahlen im Hinblick auf Endianess on Wed, 16 Dec 2009 23:30:01 GMT]]></title><description><![CDATA[<p>ich will ich will ich will<br />
wieso willst du das?<br />
hat nur nachteile.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1823795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1823795</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 16 Dec 2009 23:30:01 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Umwandlung von 32 Bit Zahlen in 64 Bit Zahlen im Hinblick auf Endianess on Thu, 17 Dec 2009 00:01:37 GMT]]></title><description><![CDATA[<p>mir ist klar, dass</p>
<pre><code class="language-cpp">typedef unsigned long long ull;
ull x = (static_cast&lt;ull&gt;(High)&lt;&lt;32) | Low;
</code></pre>
<p>einfacher/performanter/portabler ist. ICh wollte nur wissen, ob mein Code von oben so korrekt ist (es geht mir in erster Linie um das Verständnis von Endianess)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1823799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1823799</guid><dc:creator><![CDATA[Galter]]></dc:creator><pubDate>Thu, 17 Dec 2009 00:01:37 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Umwandlung von 32 Bit Zahlen in 64 Bit Zahlen im Hinblick auf Endianess on Thu, 17 Dec 2009 01:16:03 GMT]]></title><description><![CDATA[<p>ok.<br />
du hast die endianness genau vertauscht.</p>
<p>little endian fängt bei adresse 0 mit dem least-significant-byte an. d.h. du musst auch in arr[0] den &quot;low&quot; teil reinschreiben. also genau verkehrt rum.</p>
<p>natürlich setzt es er weitere dinge voraus, wie z.b. dass &quot;long long&quot; genau doppelt so gross ist wie &quot;int&quot;. das ist nicht garantiert, aber WENN es so ist (und oft ist es so), dann müsste dein code IMO passen.</p>
<p>einfaches beispiel, (mit 32 bit):</p>
<p>gegeben sei die zahl 0x12345678</p>
<p>little endian (z.B. x86) legt die so in den speicher:</p>
<pre><code>adresse   0     1     2     3
        0x78, 0x56, 0x34, 0x12
        low ------------&gt; high
</code></pre>
<p>und big endian (z.B. 68k) legt die so in den speicher:</p>
<pre><code>adresse   0     1     2     3
        0x12, 0x34, 0x56, 0x78
        high &lt;------------ low
</code></pre>
<p>wenn du nun den 0x1234 (high) und den 0x5678 (low) teil in getrennten variablen hast, dann musst du natürlich bei little endian den low teil zuerst schreiben, und dann erst den high teil.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1823812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1823812</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 17 Dec 2009 01:16:03 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Umwandlung von 32 Bit Zahlen in 64 Bit Zahlen im Hinblick auf Endianess on Thu, 17 Dec 2009 11:02:49 GMT]]></title><description><![CDATA[<p>Schon mal ueber union nachgedacht:</p>
<pre><code class="language-cpp">union Whatever
{
  uint_64 i64;
  uint_32 a32[2];
};
</code></pre>
<p>Dabei kannst du dann deine 64 Bit Zahl zuweisen und die einzelnen Array-Elemente als 32 Bit Zahl auslesen. Ob die Varianten mittels memcpy oder static_cast + shift schneller sind, wage ich zu bezweifeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1823894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1823894</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 17 Dec 2009 11:02:49 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Umwandlung von 32 Bit Zahlen in 64 Bit Zahlen im Hinblick auf Endianess on Thu, 17 Dec 2009 16:26:01 GMT]]></title><description><![CDATA[<p>static_cast + shift ist mit an sicherheit grenzender wahrscheinlichkeit die schnellste variante.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824064</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 17 Dec 2009 16:26:01 GMT</pubDate></item></channel></rss>