<?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[Arrayverwirrung]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe im Moment das Problem, dass ich nicht verstehe, warum das hier so abläuft wie es abläuft.</p>
<pre><code class="language-cpp">DWORD64 shift[4] = { 0, 0, 0, 0 };
DWORD dr = (DWORD)&amp;shift;
int temp = 0;
*(DWORD64*)(dr+temp*sizeof(DWORD64)) = 0x1;
temp++;
*(DWORD64*)(dr+temp*sizeof(DWORD64)) = 0x2;
String bla;
bla.sprintf(&quot;%x %x %x %x %d&quot;,shift[0],shift[1],shift[2],shift[3],temp);
ShowMessage(bla);
</code></pre>
<p>Das ergibt folgende Ausgabe:<br />
1 0 2 0 0<br />
Ich erwarte aber eigentlich<br />
1 2 0 0 1</p>
<p>Wenn ich das DWORD64 durch zB char ersetze funktioniert das ganze problemlos so wie man es erwartet. Funktioniert diese Pointermethode nicht bei einer 64bit Variablen?</p>
<p>greetz KN4CK3R</p>
<p>Edit: falsches Forum, sollte eigentlich nach C, ist ja nichts C++ spezifisches<br />
Edit2: hat sich mittlerweile geklärt, DWORD statt DWORD64 geht auch. Interessiert mich aber trotzdem warum das nicht so funktioniert wie es soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256559/arrayverwirrung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 05:45:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256559.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Dec 2009 21:51:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Arrayverwirrung on Mon, 14 Dec 2009 21:59:43 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe im Moment das Problem, dass ich nicht verstehe, warum das hier so abläuft wie es abläuft.</p>
<pre><code class="language-cpp">DWORD64 shift[4] = { 0, 0, 0, 0 };
DWORD dr = (DWORD)&amp;shift;
int temp = 0;
*(DWORD64*)(dr+temp*sizeof(DWORD64)) = 0x1;
temp++;
*(DWORD64*)(dr+temp*sizeof(DWORD64)) = 0x2;
String bla;
bla.sprintf(&quot;%x %x %x %x %d&quot;,shift[0],shift[1],shift[2],shift[3],temp);
ShowMessage(bla);
</code></pre>
<p>Das ergibt folgende Ausgabe:<br />
1 0 2 0 0<br />
Ich erwarte aber eigentlich<br />
1 2 0 0 1</p>
<p>Wenn ich das DWORD64 durch zB char ersetze funktioniert das ganze problemlos so wie man es erwartet. Funktioniert diese Pointermethode nicht bei einer 64bit Variablen?</p>
<p>greetz KN4CK3R</p>
<p>Edit: falsches Forum, sollte eigentlich nach C, ist ja nichts C++ spezifisches<br />
Edit2: hat sich mittlerweile geklärt, DWORD statt DWORD64 geht auch. Interessiert mich aber trotzdem warum das nicht so funktioniert wie es soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1822562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1822562</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Mon, 14 Dec 2009 21:59:43 GMT</pubDate></item><item><title><![CDATA[Reply to Arrayverwirrung on Tue, 15 Dec 2009 12:09:44 GMT]]></title><description><![CDATA[<p>DWORD64 = 8 byte unsigned<br />
DWORD = 4 byte unsigned<br />
0x1/0x2 = 4 byte (jeweils) unsigned(!)</p>
<p>0x1 passt problemlos in DWORD was wiederum problemlos in DWORD64 passt.<br />
in den ersten 8 byte sollte also die 1 stehen und 8 byte später die 2.</p>
<pre><code>Dein dw64Schift 0
00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000001

Dein dw64shift 1
00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000010

shift dw642/3 
00000000 00000000 00000000 00000000 
00000000 00000000 00000000 00000000
</code></pre>
<p>Wie der ganze Kram jetzt dargestellt wird hängt von der Interpretation ab, ändert jedoch nichts daran wie das Teil im Speicher aussieht.</p>
<p>gibst du shift 0 - 4 als DWORD64 Array aus erhälst du 12 00<br />
weil der indexoperator jeweils 8 byte springt</p>
<p>gibst du shift 0 - 4 als DWORD-array aus, erhälst du 1 0 2 0<br />
weil du halt jeweils nur um 4 byte springst.</p>
<p>Das hießt, mit shift 0 - 4 als DWORD ausgegeben, liest du nur die ersten beiden DWORD64 - Werte aus.<br />
In meiner Darstellung habe ich zwei zeilen angegeben, die 0 die an der zweiten Stelle ausgegeben wird, ist die Nullreihe in der zweiten Zeile deiens dw64shift0</p>
<p>und die 2 an der dritten Stelle der Wert aus den Ersten 4 Byte deiens dw64shift1</p>
<p>EDIT:<br />
In meinem Beispiel liest man von die Bytewerte von unten nach oben und von rechts nach links.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1822756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1822756</guid><dc:creator><![CDATA[Kahino]]></dc:creator><pubDate>Tue, 15 Dec 2009 12:09:44 GMT</pubDate></item><item><title><![CDATA[Reply to Arrayverwirrung on Tue, 15 Dec 2009 12:27:13 GMT]]></title><description><![CDATA[<p>ah ok, also müsste ich um mir das richtige ausgeben zu lassen eine 64bit Version von %x benutzen, weil das normale %x nicht weit genug reicht.</p>
<p>Danke für die Erklärung, war schön anschaulich.</p>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1822775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1822775</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Tue, 15 Dec 2009 12:27:13 GMT</pubDate></item></channel></rss>