<?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[Compiler Fehler, oder mache ich was falsch...]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenn ich mir ein Byte-Array deklariere und dieses mit Werte fülle, und mit einem Struct draufzeige, dann kommen mir unverständliche Werte.</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;iostream.h&gt;

void main()
{
	struct strAktion
	{
		BYTE bAktion;
		WORD len;

	};
	BYTE p[5] = { 49,01,00,01,99 };

	strAktion * a = (strAktion *) p;
	cout &lt;&lt; a-&gt;bAktion &lt;&lt; endl;
	cout &lt;&lt; a-&gt;len &lt;&lt; endl;
}
</code></pre>
<p>Mal angenommen &quot;p&quot; hat die Adresse 0, so müssten die Variablen im Struct nach der Zuweisung ja die Adressen 0 für strAktion-&gt;bAktion und 1 für strAktion-&gt;len haben (Low-Byte kommt zuerst).<br />
D.h. es müssten folgende Werte ausgegeben werden: 1 (ascii für 49) und 1 für strAktion-&gt;len.</p>
<p>Aber stattdessen bekomme ich folgende Ausgabe: 1 für strAktion-&gt;bAktion was auch richtig ist, aber für strAktion-&gt;len bekomme ich 256.<br />
D.h er weist dem Short wert die Adresse 2 zu statt 1 (was meiner Ansicht richtig sein müsste), womit ein Byte übersprungen wird.</p>
<p>Wo ist da der Wurm drin? Ist es Tatsälich ein Compiler Fehler, oder denke ich einfach nur Falsch.</p>
<p>Gruß Stu</p>
<p>PS.: Ich benutze Visual Studio 6.0</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/134723/compiler-fehler-oder-mache-ich-was-falsch</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 18:28:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/134723.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 28 Jan 2006 00:16:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Compiler Fehler, oder mache ich was falsch... on Sat, 28 Jan 2006 00:16:11 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenn ich mir ein Byte-Array deklariere und dieses mit Werte fülle, und mit einem Struct draufzeige, dann kommen mir unverständliche Werte.</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;iostream.h&gt;

void main()
{
	struct strAktion
	{
		BYTE bAktion;
		WORD len;

	};
	BYTE p[5] = { 49,01,00,01,99 };

	strAktion * a = (strAktion *) p;
	cout &lt;&lt; a-&gt;bAktion &lt;&lt; endl;
	cout &lt;&lt; a-&gt;len &lt;&lt; endl;
}
</code></pre>
<p>Mal angenommen &quot;p&quot; hat die Adresse 0, so müssten die Variablen im Struct nach der Zuweisung ja die Adressen 0 für strAktion-&gt;bAktion und 1 für strAktion-&gt;len haben (Low-Byte kommt zuerst).<br />
D.h. es müssten folgende Werte ausgegeben werden: 1 (ascii für 49) und 1 für strAktion-&gt;len.</p>
<p>Aber stattdessen bekomme ich folgende Ausgabe: 1 für strAktion-&gt;bAktion was auch richtig ist, aber für strAktion-&gt;len bekomme ich 256.<br />
D.h er weist dem Short wert die Adresse 2 zu statt 1 (was meiner Ansicht richtig sein müsste), womit ein Byte übersprungen wird.</p>
<p>Wo ist da der Wurm drin? Ist es Tatsälich ein Compiler Fehler, oder denke ich einfach nur Falsch.</p>
<p>Gruß Stu</p>
<p>PS.: Ich benutze Visual Studio 6.0</p>
]]></description><link>https://www.c-plusplus.net/forum/post/978625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/978625</guid><dc:creator><![CDATA[Stu]]></dc:creator><pubDate>Sat, 28 Jan 2006 00:16:11 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler Fehler, oder mache ich was falsch... on Sat, 28 Jan 2006 01:10:47 GMT]]></title><description><![CDATA[<p>kann sein dass der compiler noch ein paddingbyte dazwischenschiebt. je nach compiler die option wählen um das pading abzuschalten bzw allignment auf 1 stellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/978632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/978632</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Sat, 28 Jan 2006 01:10:47 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler Fehler, oder mache ich was falsch... on Sat, 28 Jan 2006 09:42:40 GMT]]></title><description><![CDATA[<p>weiter ist mir etwas aufgefallen:</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;iostream.h&gt;

void main()
{
	WORD *len;

	BYTE p[5] = { 49,01,00,01,99 };

	len = (WORD *) p + 1;
	cout &lt;&lt; *len &lt;&lt; endl;
}
</code></pre>
<p>Bei einer Manuellen zuweisung der Adress von &quot;len&quot; bekommt die Variable nicht den Wert p +1, sonder p + 2!<br />
D.h. wenn p die Adresse 0 hat, dann ist len nach der zuweising p+1 nicht 1, sonder 2.</p>
<p>Wenn ich vorher aber nen Byte zeiger auf p+1 setze, ihn danach zum nem WORD zeiger convertiere, so funktioniert es.</p>
<pre><code>/*WORD *len;
	BYTE *b;

	BYTE p[5] = { 49,01,00,01,99 };

	b = p + 1;
	len = (WORD*) b;

	cout &lt;&lt; *b + 0x30&lt;&lt; endl;
	cout &lt;&lt; *len &lt;&lt; endl;*/
</code></pre>
<p>Das kann doch net sein...<br />
Konnte das wirklich am paddingbyte liegen? denn ich deklariere den buffer doch selbst und gebe die Werte ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/978692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/978692</guid><dc:creator><![CDATA[Stu]]></dc:creator><pubDate>Sat, 28 Jan 2006 09:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler Fehler, oder mache ich was falsch... on Sat, 28 Jan 2006 11:45:41 GMT]]></title><description><![CDATA[<p>Stu schrieb:</p>
<blockquote>
<pre><code>#include &lt;windows.h&gt;
#include &lt;iostream.h&gt;

void main()
{
	WORD *len;

	BYTE p[5] = { 49,01,00,01,99 };
	
	len = (WORD *) p + 1;
	cout &lt;&lt; *len &lt;&lt; endl;
}
</code></pre>
</blockquote>
<p>Allein das ist ja völlig falsch. So sollte es aussehen:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;iostream&gt;

int main()
{
	WORD *len;

	BYTE p[5] = { 49,01,00,01,99 };

	len = (WORD *) p + 1;
	std::cout &lt;&lt; *len &lt;&lt; std::endl;
}
</code></pre>
<p>Und jetzt mal Windowsunabhängig:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
	int * len;

	unsigned char p[5] = { 49,01,00,01,99 };

	len = (int *) p + 1;
	std::cout &lt;&lt; len &lt;&lt; &quot; &quot; &lt;&lt; (void*) p &lt;&lt; std::endl;
}
</code></pre>
<p>Und wenn ich das starte, bekomme ich genau das erwartete. len zeigt 4 bytes weiter als p.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/978777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/978777</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Sat, 28 Jan 2006 11:45:41 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler Fehler, oder mache ich was falsch... on Sat, 28 Jan 2006 20:11:47 GMT]]></title><description><![CDATA[<p>also ich bekomme nicht das raus was ich will.</p>
<p>Bespiespeicher:</p>
<p>unsigned char p[5] = { 49,01,00,01,99 };<br />
Angenommen p ist auf adresse 0, dann würde der Speicher so aussehen:</p>
<p>0 : 49<br />
1 : 01<br />
2 : 00<br />
3 : 01<br />
4 : 99</p>
<p>len = (unsigned short <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> p + 1;</p>
<p>wenn p = 0 ist, dann ist p + 1 = 1, d.h len sollte die Adresse 1 haben, damit die nächten 2 bytes ausgelesen werden können.</p>
<p>Wenn ich den code aber Debugge, dann hat len nach der Zuweisung nicht p+1, sondern p+2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/979260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/979260</guid><dc:creator><![CDATA[Stu123]]></dc:creator><pubDate>Sat, 28 Jan 2006 20:11:47 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler Fehler, oder mache ich was falsch... on Sat, 28 Jan 2006 20:46:13 GMT]]></title><description><![CDATA[<p>Stu123 schrieb:</p>
<blockquote>
<p>len = (unsigned short <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> p + 1;</p>
<p>wenn p = 0 ist, dann ist p + 1 = 1, d.h len sollte die Adresse 1 haben, damit die nächten 2 bytes ausgelesen werden können.</p>
</blockquote>
<p>Falsch sizeof(unsigned short) ist 2<br />
daher gibt</p>
<pre><code class="language-cpp">(unsigned short *) p + 1;
</code></pre>
<p>eine adresse p + 2 bytes.</p>
<p>wenn du unbedingt die adresse des 2. bytes willst dann entweder</p>
<pre><code class="language-cpp">unsigned short * len = (unsigned short *)&amp; p[1];
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">unsigned short * len = (unsigned short *)((char *)p + 1);
</code></pre>
<p>Du solltest dich etwas mit Pointerarithmetik befassen.<br />
Kurt</p>
<p>EDIT geht natürlich auch so</p>
<pre><code class="language-cpp">unsigned short * len = (unsigned short *)( p + 1);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/979273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/979273</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Sat, 28 Jan 2006 20:46:13 GMT</pubDate></item></channel></rss>