<?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[char bzw. void in float umwandeln]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe folgendes Problem:<br />
Ich habe einen Puffer der Form</p>
<pre><code class="language-cpp">char mess_rxMsg[MSG_SIZE];
</code></pre>
<p>bzw.</p>
<pre><code class="language-cpp">LPVOID mess_rxMsg[MSG_SIZE];
</code></pre>
<p>(geht beides)<br />
Daraus möchte ich die ersten vier Byte zu einem float-Wert, der ja aus 32 Bit besteht, zusammensetzen. Dieser soll dann auf der Konsole ausgegeben bzw. in eine Datei geschrieben werden. Dieser float-Wert wurde zuvor über die USB-Schnittstelle übertragen und die Funktion (wurde mir vom Hardwarehersteller in einer DLL zur Verfügung gestellt) für den Lesevorgang schreibt ihn in diesen Puffer rein.<br />
Jedenfalls habe ich es weder mit cast operators noch mit Zuweisungen anhand von Zeigern hinbekommen. Gibt es noch eine andere Möglichkeit?</p>
<p>Viele Grüße &amp; Danke für jede hilfreiche Antwort!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/138082/char-bzw-void-in-float-umwandeln</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 00:44:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/138082.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Feb 2006 10:56:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 10:56:43 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe folgendes Problem:<br />
Ich habe einen Puffer der Form</p>
<pre><code class="language-cpp">char mess_rxMsg[MSG_SIZE];
</code></pre>
<p>bzw.</p>
<pre><code class="language-cpp">LPVOID mess_rxMsg[MSG_SIZE];
</code></pre>
<p>(geht beides)<br />
Daraus möchte ich die ersten vier Byte zu einem float-Wert, der ja aus 32 Bit besteht, zusammensetzen. Dieser soll dann auf der Konsole ausgegeben bzw. in eine Datei geschrieben werden. Dieser float-Wert wurde zuvor über die USB-Schnittstelle übertragen und die Funktion (wurde mir vom Hardwarehersteller in einer DLL zur Verfügung gestellt) für den Lesevorgang schreibt ihn in diesen Puffer rein.<br />
Jedenfalls habe ich es weder mit cast operators noch mit Zuweisungen anhand von Zeigern hinbekommen. Gibt es noch eine andere Möglichkeit?</p>
<p>Viele Grüße &amp; Danke für jede hilfreiche Antwort!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1000917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1000917</guid><dc:creator><![CDATA[blubbfisch]]></dc:creator><pubDate>Thu, 23 Feb 2006 10:56:43 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 11:00:46 GMT]]></title><description><![CDATA[<p>Bist du sicher, daß der float-Wert binär dort eingetragen wird? Wenn ja, sollte ein &quot;reinterpret_cast&lt;float*&gt;(mess_rxMsg)&quot; dir eigentlich weiterhelfen.</p>
<p>(es könnte höchstens noch Probleme geben, wenn die DLL mit einem anderen Compiler oder anderen Einstellungen compiliert wurde als dein Programm - der genaue Aufbau eines float ist afaik nicht standardisiert)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1000921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1000921</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Thu, 23 Feb 2006 11:00:46 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 11:07:18 GMT]]></title><description><![CDATA[<p>CStoll (off) schrieb:</p>
<blockquote>
<p>Wenn ja, sollte ein &quot;reinterpret_cast&lt;float*&gt;(mess_rxMsg)&quot; dir eigentlich weiterhelfen.</p>
</blockquote>
<p>Brandgefährlich aufgrund von Alignment-Fehlern. Besser: Einen float (keinen Zeiger!) anlegen (hat dann automatisch korrektes Alignment) und in diesen die Daten mit memcpy / memmove reinkopieren. Wie der Float binär zu interpretieren ist, steht dann natürlich immernoch in den Sternen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1000928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1000928</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Thu, 23 Feb 2006 11:07:18 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 11:49:33 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<p>CStoll (off) schrieb:</p>
<blockquote>
<p>Wenn ja, sollte ein &quot;reinterpret_cast&lt;float*&gt;(mess_rxMsg)&quot; dir eigentlich weiterhelfen.</p>
</blockquote>
<p>Brandgefährlich aufgrund von Alignment-Fehlern. Besser: Einen float (keinen Zeiger!) anlegen (hat dann automatisch korrektes Alignment) und in diesen die Daten mit memcpy / memmove reinkopieren. Wie der Float binär zu interpretieren ist, steht dann natürlich immernoch in den Sternen.</p>
</blockquote>
<p>Oder den Cast von CStoll nehmen und an den Kopierkonstruktor eines neuen float wertes übergeben. Da spart man sich das memcpy.</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1000982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1000982</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Thu, 23 Feb 2006 11:49:33 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 11:54:50 GMT]]></title><description><![CDATA[<p>Mit memcpy/memmove geht es nicht, da dann für beide Parameter der Typ void* erwartet wird, und er sich beschwert, wenn ich als ersten Parameter den float angebe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1000988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1000988</guid><dc:creator><![CDATA[blubbfisch]]></dc:creator><pubDate>Thu, 23 Feb 2006 11:54:50 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 11:55:43 GMT]]></title><description><![CDATA[<p>blubbfisch schrieb:</p>
<blockquote>
<p>Mit memcpy/memmove geht es nicht, da dann für beide Parameter der Typ void* erwartet wird, und er sich beschwert, wenn ich als ersten Parameter den float angebe.</p>
</blockquote>
<p>Da musst du casten.</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1000989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1000989</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Thu, 23 Feb 2006 11:55:43 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 12:09:00 GMT]]></title><description><![CDATA[<p>Hab das jetzt mit</p>
<pre><code class="language-cpp">reinterpret_cast&lt;float*&gt;(mess_rxMsg);
</code></pre>
<p>gelöst. Hoffe es funktioniert so, da ich es leider im Moment noch nicht testen kann.<br />
Habe ich das richtig verstanden, dass mess_rxMsg ab diesem Punkt dann den Typ float* statt void * besitzt, also der Inalt der vier ersten Speicherstellen nun nicht mehr als vier char, sondern als ein einziger Wert vom Typ float interpretiert wird? Muss ich die Typumwandlung also wieder rückgängig machen, wenn ich danach wieder mit mess_rxMsg als void* arbeiten will?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001010</guid><dc:creator><![CDATA[blubbfisch]]></dc:creator><pubDate>Thu, 23 Feb 2006 12:09:00 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 12:38:54 GMT]]></title><description><![CDATA[<p>Spinnt ihr? Klar ist die Darstellung von 'float' standardisiert: <a href="http://de.wikipedia.org/wiki/Gleitkommazahl#Gleitkommazahlen_in_der_Digitaltechnik" rel="nofollow">http://de.wikipedia.org/wiki/Gleitkommazahl#Gleitkommazahlen_in_der_Digitaltechnik</a></p>
<p>Mein Vorschlag.</p>
<pre><code class="language-cpp">float leFloat(uchar a, uchar b, uchar c, uchar d)
{
    return a | (b &lt;&lt; 8) | (c &lt;&lt; 16) | (d &lt;&lt; 24);
}

unsigned char mess_rxMsg[MSG_SIZE];
leseNachrichtEin(mess_rxMsg, MSG_SIZE);

float f = leFloat(mess_rxMsg[0], mess_rxMsg[1], mess_rxMsg[2], mess_rxMsg[3]);
</code></pre>
<p>Wie immer ohne Gewähr. <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>
<p>EDIT: Fehler im Code behoben aber immernoch keine Gewähr. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1001014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001014</guid><dc:creator><![CDATA[Apollon]]></dc:creator><pubDate>Thu, 23 Feb 2006 12:38:54 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 12:10:41 GMT]]></title><description><![CDATA[<p>blubbfisch schrieb:</p>
<blockquote>
<p>Hab das jetzt mit</p>
<pre><code class="language-cpp">reinterpret_cast&lt;float*&gt;(mess_rxMsg);
</code></pre>
<p>gelöst. Hoffe es funktioniert so, da ich es leider im Moment noch nicht testen kann.<br />
Habe ich das richtig verstanden, dass mess_rxMsg ab diesem Punkt dann den Typ float* statt void * besitzt, also der Inalt der vier ersten Speicherstellen nun nicht mehr als vier char, sondern als ein einziger Wert vom Typ float interpretiert wird? Muss ich die Typumwandlung also wieder rückgängig machen, wenn ich danach wieder mit mess_rxMsg als void* arbeiten will?</p>
</blockquote>
<p>Nein, nur der Rückgabe Wert vom Cast hat den float* Typ.</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001015</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Thu, 23 Feb 2006 12:10:41 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 12:19:27 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Oder den Cast von CStoll nehmen und an den Kopierkonstruktor eines neuen float wertes übergeben. Da spart man sich das memcpy.</p>
</blockquote>
<p>Du übersiehst das Alignment-Problem. Das Ergebnis des casts von CStoll ist ein char/void-Pointer, der in einen Float-Pointer gepresst wurde. Dereferenziert man diesen (um daraus einen neuen Float zu konstruieren), muss dieser nicht well-aligned sein und das BS reagiert vielleicht mit einem SIGBUS darauf.</p>
<p>Apollon schrieb:</p>
<blockquote>
<p>Spinnt ihr?</p>
</blockquote>
<p>Nö.</p>
<p>Ja, es gibt eine IEEE-Standardisierung für die Darstellung von float. Nein, sie ist nicht vorgeschrieben im C++-Standard. Selbst in IEEE-Darstellung bleibt das Endianess-Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001028</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Thu, 23 Feb 2006 12:19:27 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 12:22:59 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3025">@Apollon</a>: Man kann's auch übertreiben <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>
<p>@blubbfish: Die Daten in deinem Puffer ändern sich bei dem reinterpret_cast&lt;&gt; überhaupt nicht, lediglich Interpretation deiner Daten hängt davon ab, was für ein Zeiger darauf zugreift - wenn du den Rückgabewert des cast einem float* zuweist, kannst du sie hinterher sogar parallel als float oder char[] interpretieren (auch wenn das i.a. wenig Sinn - und im Extremfall viel kaputt - macht).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001034</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 23 Feb 2006 12:22:59 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 12:39:25 GMT]]></title><description><![CDATA[<p>Apollon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">float leFloat(uchar a, uchar b, uchar c, uchar d)
{
    return a | (8 &lt;&lt; b) | (16 &lt;&lt; c) | (24 &lt;&lt; d);
}

unsigned char mess_rxMsg[MSG_SIZE];
leseNachrichtEin(mess_rxMsg, MSG_SIZE);

float f = leFloat(mess_rxMsg[0], mess_rxMsg[1], mess_rxMsg[2], mess_rxMsg[3]);
</code></pre>
</blockquote>
<p>Danke, genau sowas hab ich gesucht!!! <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="😃"
    /> <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="😉"
    /><br />
Hätte ich eigentlich auch selber draufkommen können... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001049</guid><dc:creator><![CDATA[blubbfisch]]></dc:creator><pubDate>Thu, 23 Feb 2006 12:39:25 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 12:46:11 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<p>Apollon schrieb:</p>
<blockquote>
<p>Spinnt ihr?</p>
</blockquote>
<p>Nö.</p>
<p>Ja, es gibt eine IEEE-Standardisierung für die Darstellung von float. Nein, sie ist nicht vorgeschrieben im C++-Standard. Selbst in IEEE-Darstellung bleibt das Endianess-Problem.</p>
</blockquote>
<p>Natuerlich legt C++ die Darstellung von Zahlen nicht fest. Diese ist durch die Hardware schon festgelegt. Auf meiner Maschine ist es die IEEE-754 Darstellung in LE Kodiert. Das Endianess-Problem ist kein Problem, wenn er in die Dokumentation des Hardwareherstellers eine Blick wirft, dann weiss er, wie die Daten zu interpretieren sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001056</guid><dc:creator><![CDATA[Apollon]]></dc:creator><pubDate>Thu, 23 Feb 2006 12:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 13:07:38 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">float leFloat(uchar a, uchar b, uchar c, uchar d)
{
    return a | (b &lt;&lt; 8) | (c &lt;&lt; 16) | (d &lt;&lt; 24);
}
</code></pre>
</blockquote>
<p>Das liefert eine Zahl zwischen 0 und ca. 4 Mio. die in keinem (sinnvollen) Zusammenhang zur Ursprungszahl steht.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11237">@Blubbfisch</a>:<br />
Schau in die Doku des Hardware-Herstellers, wie der Float aufgebaut ist.</p>
<p>Dann kannst du den entweder über Standard-C++ in einen float übertragen (indem man sich jede Stelle anschaut und draufaddiert) oder du weißt, wie float auf deiner Plattform, auf der das Programm läuft, dargestellt wird und reinterpretierst die Daten direkt auf Hardware-Ebene.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001071</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Thu, 23 Feb 2006 13:07:38 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 13:20:17 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11237">@Blubbfisch</a>:<br />
Schau in die Doku des Hardware-Herstellers, wie der Float aufgebaut ist.</p>
<p>Dann kannst du den entweder über Standard-C++ in einen float übertragen (indem man sich jede Stelle anschaut und draufaddiert) oder du weißt, wie float auf deiner Plattform, auf der das Programm läuft, dargestellt wird und reinterpretierst die Daten direkt auf Hardware-Ebene.</p>
</blockquote>
<p>Bis jetzt noch garnet, da ich den µC am anderen Ende der USB-Strippe auch noch programmieren muss. Hab nur die Funktionen für die Datenübertragung von Atmel übernommen. Werde das schon so hinbiegen, dass es passt. <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/1001075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001075</guid><dc:creator><![CDATA[blubbfisch]]></dc:creator><pubDate>Thu, 23 Feb 2006 13:20:17 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 13:35:24 GMT]]></title><description><![CDATA[<p>probiers doch mal per stringstream also erst in eine string und dann in eine andere var...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001090</guid><dc:creator><![CDATA[tia]]></dc:creator><pubDate>Thu, 23 Feb 2006 13:35:24 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 14:41:05 GMT]]></title><description><![CDATA[<p>Apollon schrieb:</p>
<blockquote>
<p>Natuerlich legt C++ die Darstellung von Zahlen nicht fest. Diese ist durch die Hardware schon festgelegt. Auf meiner Maschine ist es die IEEE-754 Darstellung in LE Kodiert. Das Endianess-Problem ist kein Problem, wenn er in die Dokumentation des Hardwareherstellers eine Blick wirft, dann weiss er, wie die Daten zu interpretieren sind.</p>
</blockquote>
<p>Also könnte man z.B. nicht bei einer Netzerkandwendung float Werte fehlerfrei übertragen???</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001162</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Thu, 23 Feb 2006 14:41:05 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 14:51:48 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Also könnte man z.B. nicht bei einer Netzerkandwendung float Werte fehlerfrei übertragen???</p>
</blockquote>
<p>Im Textformat wäre sichlich nicht performant, aber (abzüglich der Fehler, die durch die Konvertierung ins Dezimalsystem entstehen) korrekt und plattformunabhängig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001177</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Thu, 23 Feb 2006 14:51:48 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 15:45:18 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Apollon schrieb:</p>
<blockquote>
<p>Natuerlich legt C++ die Darstellung von Zahlen nicht fest. Diese ist durch die Hardware schon festgelegt. Auf meiner Maschine ist es die IEEE-754 Darstellung in LE Kodiert. Das Endianess-Problem ist kein Problem, wenn er in die Dokumentation des Hardwareherstellers eine Blick wirft, dann weiss er, wie die Daten zu interpretieren sind.</p>
</blockquote>
<p>Also könnte man z.B. nicht bei einer Netzerkandwendung float Werte fehlerfrei übertragen???</p>
<p>mfg.</p>
</blockquote>
<p>Du uebertraegst keine Floats, Ints, etc. sondern Bitmuster. Wie der Empfaenger sie interpretiert ist ihm ueberlassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001240</guid><dc:creator><![CDATA[Apollon]]></dc:creator><pubDate>Thu, 23 Feb 2006 15:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 16:26:14 GMT]]></title><description><![CDATA[<p>was mich eigentlich wundert ist.<br />
nach standard darf man</p>
<pre><code class="language-cpp">char buf[sizeof(float)];
float hans=1.125f;
memcpy(buf,&amp;hans,sizeof(float));
</code></pre>
<p>und auch zurück<br />
das impliziert doch eigentlich das</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
union fred
{
  T val;
  char chars[sizeof(T)];
};
</code></pre>
<p>dass auch passen sollte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001284</guid><dc:creator><![CDATA[b7f7]]></dc:creator><pubDate>Thu, 23 Feb 2006 16:26:14 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 17:50:13 GMT]]></title><description><![CDATA[<p>b7f7 schrieb:</p>
<blockquote>
<p>was mich eigentlich wundert ist.<br />
nach standard darf man<br />
...<br />
und auch zurück<br />
das impliziert doch eigentlich das<br />
...<br />
dass auch passen sollte</p>
</blockquote>
<p>Wenn du beide Datentypen in eine Union legst, stellst du (oder besser gesagt der Compiler) sicher, dass sie auch ein kompatibles Alignment bekommen. Damit funktioniert dann auch ein &quot;Union Cast&quot; (mal davon abgesehen, dass man laut Standard eigentlich nur auf das zuletzt zugewiesene Element einer Union zugreifen darf).</p>
<p>Hat man dagegen beide Datentypen getrennt definiert, so kann der Compiler garnicht wissen, dass ein kompatibles Alignment nötig ist. Folgendes Beispiel crasht mit sehr hoher Wahrscheinlichkeit:</p>
<pre><code class="language-cpp">char test[] = &quot;ABCDEFGHIJKL&quot;;
float f;
char* iter = test;
for( int i = 0; i &lt; 8; ++i, ++iter) {
   f = *(reinterpret_cast&lt;float*&gt;( iter));
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1001311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001311</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Thu, 23 Feb 2006 17:50:13 GMT</pubDate></item><item><title><![CDATA[Reply to char bzw. void in float umwandeln on Thu, 23 Feb 2006 17:05:08 GMT]]></title><description><![CDATA[<p>Unions darf man nicht zum casten verwenden, steht ausdrücklich im Standard.</p>
<p>Schaut euch doch mal an wieviele Protokolle auf Textbasis sind, hat schon seinen Grund.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1001333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1001333</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Thu, 23 Feb 2006 17:05:08 GMT</pubDate></item></channel></rss>