<?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[Architekturspezifische Codeerstellung]]></title><description><![CDATA[<p>Hallo,<br />
ich wollte für einen kleinen Test ein Programm erstellen, dass auch auf verschiedenen Rechnerarchitekturen lauffähig ist.</p>
<p>Hiefür habe ich mal ein Beispiel, was nicht funktioniert.<br />
Meine Frage ist nun, wie muss ich den Code ändern, damit der gewünschte Effekt eintritt.</p>
<pre><code class="language-cpp">bool big_endian()
{
	unsigned short int iVar, *piVar;
	unsigned char *pcVar;
	piVar = &amp;iVar;
	pcVar = (unsigned char *)&amp;iVar;
	iVar = 0xff00;
	if (*pcVar == 0xff)
	{
		return true;
	}
	else
	{
		return false;
	}
}

union ieee_float
{
	float a;
	if(big_endian()) //FEHLER
	{
		struct
		{
			unsigned s : 1;
			unsigned e : 8;
			unsigned m :23;
		} b;
	}
	else
	{
		struct
		{
			unsigned m :23;
			unsigned e : 8;
			unsigned s : 1;
		} b;
	}
};
</code></pre>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/163507/architekturspezifische-codeerstellung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 02:50:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/163507.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 Oct 2006 12:53:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Architekturspezifische Codeerstellung on Mon, 30 Oct 2006 12:53:07 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich wollte für einen kleinen Test ein Programm erstellen, dass auch auf verschiedenen Rechnerarchitekturen lauffähig ist.</p>
<p>Hiefür habe ich mal ein Beispiel, was nicht funktioniert.<br />
Meine Frage ist nun, wie muss ich den Code ändern, damit der gewünschte Effekt eintritt.</p>
<pre><code class="language-cpp">bool big_endian()
{
	unsigned short int iVar, *piVar;
	unsigned char *pcVar;
	piVar = &amp;iVar;
	pcVar = (unsigned char *)&amp;iVar;
	iVar = 0xff00;
	if (*pcVar == 0xff)
	{
		return true;
	}
	else
	{
		return false;
	}
}

union ieee_float
{
	float a;
	if(big_endian()) //FEHLER
	{
		struct
		{
			unsigned s : 1;
			unsigned e : 8;
			unsigned m :23;
		} b;
	}
	else
	{
		struct
		{
			unsigned m :23;
			unsigned e : 8;
			unsigned s : 1;
		} b;
	}
};
</code></pre>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164440</guid><dc:creator><![CDATA[daishi]]></dc:creator><pubDate>Mon, 30 Oct 2006 12:53:07 GMT</pubDate></item><item><title><![CDATA[Reply to Architekturspezifische Codeerstellung on Mon, 30 Oct 2006 13:02:40 GMT]]></title><description><![CDATA[<p>binaer wird dein prog glaub ich niemals plattformunabhaengig sein ^^<br />
der code und die clib gegen die gelinkt werden muss iss ja jedesmal ne andere ...</p>
<p>und wenn es fuer deine platform jedesmal neu uebersetzen musst, warum dann nicht gleich praeprozessor direktiven nutzen ...<br />
unter linux kompilierst es ja fast eh fuer jede distrie neu ...</p>
<p>Was mich aber auch echt intressieren wuerd, ob dein Ansatz funktioniert, wenn man das auf som Linux fuer mac laufen laesst ... hab nur kein mac hier ^^</p>
<p>Ciao ..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164443</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Mon, 30 Oct 2006 13:02:40 GMT</pubDate></item><item><title><![CDATA[Reply to Architekturspezifische Codeerstellung on Mon, 30 Oct 2006 14:04:19 GMT]]></title><description><![CDATA[<p>Du kannst Anweisungen wie if() nicht in einer Typdeklaration einbringen - das beste, was du machen kannst, wäre die Entscheidung dem Präprosessor zu überlassen:</p>
<pre><code class="language-cpp">union ieee_float
{
    float a;
#if big_endian
    struct
    {
        unsigned s : 1;
        unsigned e : 8;
        unsigned m :23;
    } b;
#else
    struct
    {
        unsigned m :23;
        unsigned e : 8;
        unsigned s : 1;
    } b;
#endif
};
</code></pre>
<p>(allerdings bin ich nicht sicher, ob und wie die big_endian-Überprüfung durch den Präprozessor läuft)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164444</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 30 Oct 2006 14:04:19 GMT</pubDate></item><item><title><![CDATA[Reply to Architekturspezifische Codeerstellung on Mon, 30 Oct 2006 13:56:30 GMT]]></title><description><![CDATA[<p>Danke erstmal.<br />
Wenn ich eine Lösung finden sollte, melde ich mich nochmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164490</guid><dc:creator><![CDATA[daishi]]></dc:creator><pubDate>Mon, 30 Oct 2006 13:56:30 GMT</pubDate></item><item><title><![CDATA[Reply to Architekturspezifische Codeerstellung on Mon, 30 Oct 2006 14:43:47 GMT]]></title><description><![CDATA[<p>daishi schrieb:</p>
<blockquote>
<p>Hallo,<br />
ich wollte für einen kleinen Test ein Programm erstellen, dass auch auf verschiedenen Rechnerarchitekturen lauffähig ist....</p>
</blockquote>
<p>Hi,</p>
<p>warum machst Du Dir das eigentlich so schwer ?<br />
Ein float ist auf jeder Architektur ein float und Compiler/Co sorgen schon dafür, dass das richtig im Speicher steht. Erst, wenn Du selbst Hardware ansprechen willst, wird das relevant, aber<br />
a) das würde ich nur in entsprechenden Schnittstellen berücksichtigen und<br />
b) da weiß der Compiler das dann auch und bietet Dir vermutlich entsprechende &quot;Präprozessor-Schalter&quot; an (habe ich jetzt nicht nachgesehen, welche):</p>
<p>Zur Not kannst Du zur Laufzeit einen Test machen..</p>
<pre><code class="language-cpp">// Nur zu Demozwecken !!! Reines C ... ohne &quot;++&quot;
    int i = 1;
    char* pc = (char*) i&amp;;
    if(pc[0]) printf(&quot;little endian&quot;);
    else printf(&quot;big endian&quot;);
</code></pre>
<p>AAAAABER: Du mußt dann auch unterschiedliche Längen im Speicher (mit sizeof()), Genauigkeiten (&quot;limits&quot;) etc. berücksichtigen (weißt Du vermutlich, aber ich wollte es erwähnt haben).</p>
<p>Letztlich sollte man das Plattformunabhängigkeit, was C/++ bietet, nutzen und mit den eingebauten Datentypen solange rechnen, wie es geht.....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164532</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 30 Oct 2006 14:43:47 GMT</pubDate></item></channel></rss>