<?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[Probleme mit reinterpret_cast&amp;lt;double*&amp;gt;]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem:</p>
<pre><code class="language-cpp">double* k;
unsigned int komp;
komp = ~komp;
k = reinterpret_cast&lt;double*&gt;(&amp;komp);
</code></pre>
<p>Ich möchte also ein unsigned int in einen double überführen, und vorher jedes einzelne Bit des unsigned int tauschen.<br />
Wenn ich dies in ein float, anstatt einem double mache, läuft es einwandfrei. Hier bekomme ich aber immer nur 0 zurück.<br />
Ich habe nun versucht dies mit Visual Studio 20005 zu debuggen und bekomme als Fehler nach der reinterpret_cast Stelle für k[0]:<br />
2,64...e-308<br />
und komp war allerdings vorher:<br />
3258761612<br />
Dies bekomme ich aber auch, wenn komp vorher<br />
123176233 war,<br />
oder 1538900071.<br />
Also bekomme ich immer dengleichen Wert zurück.<br />
Das kann doch irgendwie nicht stimmen, oder?</p>
<p>Kann mir vielleicht jemand helfen?</p>
<p>Florian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/185855/probleme-mit-reinterpret_cast-lt-double-gt</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 07:10:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/185855.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 Jul 2007 09:10:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 09:10:09 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem:</p>
<pre><code class="language-cpp">double* k;
unsigned int komp;
komp = ~komp;
k = reinterpret_cast&lt;double*&gt;(&amp;komp);
</code></pre>
<p>Ich möchte also ein unsigned int in einen double überführen, und vorher jedes einzelne Bit des unsigned int tauschen.<br />
Wenn ich dies in ein float, anstatt einem double mache, läuft es einwandfrei. Hier bekomme ich aber immer nur 0 zurück.<br />
Ich habe nun versucht dies mit Visual Studio 20005 zu debuggen und bekomme als Fehler nach der reinterpret_cast Stelle für k[0]:<br />
2,64...e-308<br />
und komp war allerdings vorher:<br />
3258761612<br />
Dies bekomme ich aber auch, wenn komp vorher<br />
123176233 war,<br />
oder 1538900071.<br />
Also bekomme ich immer dengleichen Wert zurück.<br />
Das kann doch irgendwie nicht stimmen, oder?</p>
<p>Kann mir vielleicht jemand helfen?</p>
<p>Florian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316646</guid><dc:creator><![CDATA[floriank]]></dc:creator><pubDate>Mon, 02 Jul 2007 09:10:09 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 09:14:29 GMT]]></title><description><![CDATA[<p>was ist an</p>
<pre><code class="language-cpp">unsigned komp;
komp ~= komp;
double k = komp;
</code></pre>
<p>schlecht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316651</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Mon, 02 Jul 2007 09:14:29 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 09:17:05 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>diese Fehlermeldung in Visual Studio:</p>
<blockquote>
<p>1&gt;c:\dokumente und einstellungen\floriank\eigene dateien\visual studio 2005\projects\komplett\komplett\main_neu.cpp(438) : error C2440: '=': 'unsigned int' kann nicht in 'double *' konvertiert werden<br />
1&gt; Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat</p>
</blockquote>
<p>Florian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316654</guid><dc:creator><![CDATA[floriank]]></dc:creator><pubDate>Mon, 02 Jul 2007 09:17:05 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 09:23:50 GMT]]></title><description><![CDATA[<p>floriank schrieb:</p>
<blockquote>
<pre><code class="language-cpp">double* k;
unsigned int komp;
komp = ~komp;
k = reinterpret_cast&lt;double*&gt;(&amp;komp);
</code></pre>
</blockquote>
<p>Ein reinterpret_cast interpretiert deinen Zeiger auf unsigned int als Zeiger auf double. Also das, was im Speicher als unsigned int steht, wird als double interpretiert. Das wird in der Regel nicht der Wert sein, den Du erwartest, zumal die Grössen der Datentypen sich mit ziemlicher Sicherheit unterscheiden. thordk hat Dir ja die richtige Lösung gezeigt. Da wird der Wert gecastet. Mit dem C++-style-cast wäre das ein static_cast:</p>
<pre><code class="language-cpp">double k;
unsigned int komp = f();
k = static_cast&lt;double&gt;(~komp);
</code></pre>
<p>Der thordk hat das weggelassen, da das sowieso implizit gemacht wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316658</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Mon, 02 Jul 2007 09:23:50 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 09:35:14 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>Ein reinterpret_cast interpretiert deinen Zeiger auf unsigned int als Zeiger auf double. Also das, was im Speicher als unsigned int steht, wird als double interpretiert. Das wird in der Regel nicht der Wert sein, den Du erwartest, zumal die Grössen der Datentypen sich mit ziemlicher Sicherheit unterscheiden.</p>
</blockquote>
<p>Genau das möchte ich ja eigentlich haben. Ich möchte nicht exakt den Wert haben. Mich stört vorallem, daß bei der anderen Methode immer derselbe Wert nach dem reinterpret_cast heraus kommt, egal was ich eingebe.</p>
<p>Um etwas weiter auszuholen. Ich habe Werte als double gespeichert. Diese möchte ich nun als unsigned int interpretieren (aber nicht den genauen Wert, sondern (sozusagen) die Binärdarstellung davon). Nun führe ich damit verschiedene Dinge aus (z.B. Kompressionen). Beim zurückgewinnen, möchte ich nun also den exakten Wert von vorher zurück (und dieser sollte in der Regel auch ein wirklicher double Wert sein).<br />
Da ich mich vorallem mit den Binärdarstellungen beschäftige, bringt mir ein static_cast gar nichts.<br />
Ich weiß, daß die Werte in komp jeweils mit denen übereinstimmen, die ich auf dem Hinweg gewonnen habe (also nach dem reinterpret_cast&lt;unsigned int*&gt; und nun möchte ich dies einfach rückgängig machen.<br />
Nur mit meiner Methode kommt wie bereits erwähnt immer:<br />
2,64...e-308 heraus.<br />
Da die Werte aber vorher verschieden waren, stimmt hier irgendetwas nicht.</p>
<p>Florian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316667</guid><dc:creator><![CDATA[floriank]]></dc:creator><pubDate>Mon, 02 Jul 2007 09:35:14 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 09:43:37 GMT]]></title><description><![CDATA[<p>Vergleich doch einmal sizeof(int) und sizeof(double) - gut möglich, daß du den hinteren Teil des double's verschluckt (und auf dem Rückweg mit Datenmüll gefüllt) hast.</p>
<p>(aber daß immer der selbe Wert rauskommt, ist auch seltsam)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316676</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 02 Jul 2007 09:43:37 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 10:18:08 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Vergleich doch einmal sizeof(int) und sizeof(double) - gut möglich, daß du den hinteren Teil des double's verschluckt (und auf dem Rückweg mit Datenmüll gefüllt) hast.</p>
<p>(aber daß immer der selbe Wert rauskommt, ist auch seltsam)</p>
</blockquote>
<p>Ja das sind 4 und 8. Daran könnte es natürlich liegen, daß nicht exakt die Werte rauskommen, aber immer derselbe Wert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316700</guid><dc:creator><![CDATA[floriank]]></dc:creator><pubDate>Mon, 02 Jul 2007 10:18:08 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 10:49:05 GMT]]></title><description><![CDATA[<p>Wenn ich bei der Konvertierung folgendes mache:</p>
<pre><code class="language-cpp">unsigned int *o;
double original;
o = reinterpret_cast&lt;unsigned int*&gt;(&amp;original);
</code></pre>
<p>Ist dann das double in o[0] und o[1] gespeichert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316745</guid><dc:creator><![CDATA[floriank]]></dc:creator><pubDate>Mon, 02 Jul 2007 10:49:05 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 10:50:27 GMT]]></title><description><![CDATA[<p>Vermutlich ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316746</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 02 Jul 2007 10:50:27 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 10:58:08 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>für deinen Zeiger auf double steht nicht genug 'korrekten' Speicherplatz<br />
zur Verfügung.<br />
Nach dem Cast zeigt er auf die 4 Byte von unsigned int und auf weitere 4<br />
undefinierte Byte im Arbeitsspeicher.</p>
<p>Das bei dir immer der selbe Wert rauskommt, mag daran liegen, das die undefinierten 4 Byte den Exponenten auf einen ebenfalls undefinierten Wert setzen.<br />
Von den 11 Bit für den Exponenten sind nämlich 2 Bit für NaN- und INF-Fälle vorgesehen, wenn diese gesetzt sind, kommt halt Ramsch raus.</p>
<p>Wenn du vorher Speicher reservierst, indem du z.B. eine double variable<br />
deklarierst und dann die Bits der unsigned int variable dort<br />
reinkopierst, dann klappt das.<br />
Es kommen Ergebnisse raus, die sich im Wertebereich von double bewegen.</p>
<p>In c++ kenne ich keine Funktion, die man statt memcpy nehmen könnte:</p>
<pre><code class="language-cpp">int main()
{
	double k = 0.0;
	unsigned int komp = 3258761612;

 	memcpy( &amp;k, &amp;komp, sizeof(unsigned int) );
	cout &lt;&lt; k &lt;&lt; endl;

	komp = 123176233;
	k = 0.0;
	memcpy( &amp;k, &amp;komp, sizeof(unsigned int) );
	cout &lt;&lt; k &lt;&lt; endl;

	komp = 1538900071;
	k = 0.0;
	memcpy( &amp;k, &amp;komp, sizeof(unsigned int) );
	cout &lt;&lt; k &lt;&lt; endl;

	return 0;
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316752</guid><dc:creator><![CDATA[proggingmania]]></dc:creator><pubDate>Mon, 02 Jul 2007 10:58:08 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 11:12:40 GMT]]></title><description><![CDATA[<p>proggingmania schrieb:</p>
<blockquote>
<p>In c++ kenne ich keine funktion, die man statt memcpy nehmen könnte:</p>
</blockquote>
<p>std::copy( )</p>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316765</guid><dc:creator><![CDATA[kenner der dummköpfe]]></dc:creator><pubDate>Mon, 02 Jul 2007 11:12:40 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 11:15:52 GMT]]></title><description><![CDATA[<p>kenner der dummköpfe schrieb:</p>
<blockquote>
<p>proggingmania schrieb:</p>
<blockquote>
<p>In c++ kenne ich keine funktion, die man statt memcpy nehmen könnte:</p>
</blockquote>
<p>std::copy( )</p>
<p>...</p>
</blockquote>
<p>Ja, sehr nett, aber für die Anwendung unbrauchbar <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 />
(um auf Byte-Ebene hantieren zu können, sind die passenden C-Funktionen doch ideal)</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1480">@pm</a>: Die Alternative wäre höchstens noch, einen int und double in einer union zu verstauen <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/1316769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316769</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 02 Jul 2007 11:15:52 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 11:20:17 GMT]]></title><description><![CDATA[<p>kenner der dummköpfe schrieb:</p>
<blockquote>
<p>proggingmania schrieb:</p>
<blockquote>
<p>In c++ kenne ich keine funktion, die man statt memcpy nehmen könnte:</p>
</blockquote>
<p>std::copy( )<br />
...</p>
</blockquote>
<p>Klasse anonymer Mr. Schlaukopf und wie soll das in Form von Quelltext aussehen ?<br />
Ich bekomme da:</p>
<pre><code>error C2782: '_OI __cdecl std::copy(_II,_II,_OI)' : Vorlagenparameter '_II' ist mehrdeutig
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1316772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316772</guid><dc:creator><![CDATA[proggingmania]]></dc:creator><pubDate>Mon, 02 Jul 2007 11:20:17 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 11:27:11 GMT]]></title><description><![CDATA[<p>proggingmania schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int main()
{
	double k = 0.0;
	unsigned int komp = 3258761612;

 	memcpy( &amp;k, &amp;komp, sizeof(unsigned int) );
	cout &lt;&lt; k &lt;&lt; endl;

	komp = 123176233;
	k = 0.0;
	memcpy( &amp;k, &amp;komp, sizeof(unsigned int) );
	cout &lt;&lt; k &lt;&lt; endl;

	komp = 1538900071;
	k = 0.0;
	memcpy( &amp;k, &amp;komp, sizeof(unsigned int) );
	cout &lt;&lt; k &lt;&lt; endl;

	return 0;
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Danke dafür. Nur noch eine Frage. Wenn ich nun den Hinweg anschaue, muss ich anscheinend mein double in 2 unsigned int speichern, richtig?<br />
Wie kann ich diese beiden dann wieder zusammenführen?</p>
<p>Also konkret würde ich jetzt so vorgehen:</p>
<pre><code class="language-cpp">double k = 1.2345;  
unsigned int komp*;

memcpy( &amp;komp, &amp;k, sizeof(double) );
</code></pre>
<p>So daß ich den double-Wert in komp[0] und komp[1] gespeichert habe.<br />
oder wenn das nicht klappt:</p>
<pre><code class="language-cpp">double k = 1.2345;  
unsigned int komp*;
komp = reinterpret_cast&lt;unsigned int*&gt;(&amp;k);
</code></pre>
<p>Nur wie bekomme ich den Rückweg hin? Ich müßte ja jetzt komp[0] und komp[1] zurückführen nach k.</p>
<p>Florian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316782</guid><dc:creator><![CDATA[floriank]]></dc:creator><pubDate>Mon, 02 Jul 2007 11:27:11 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 11:30:38 GMT]]></title><description><![CDATA[<p>Wenn du die beiden int-Werte die ganze Zeit am Stück hältst, sollte der Rückweg eigentlich genauso klappen wie der Hinweg:</p>
<pre><code class="language-cpp">double dval;
unsigned int ival[sizeof(double)/sizeof(int)];

dval=170.0;
memcpy(ival,&amp;dval,sizeof(double));
...
memcpy(&amp;dval,ival,sizeof(double));
cout&lt;&lt;dval;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1316785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316785</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 02 Jul 2007 11:30:38 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 11:53:04 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Wenn du die beiden int-Werte die ganze Zeit am Stück hältst, sollte der Rückweg eigentlich genauso klappen wie der Hinweg:</p>
<pre><code class="language-cpp">double dval;
unsigned int ival[sizeof(double)/sizeof(int)];

dval=170.0;
memcpy(ival,&amp;dval,sizeof(double));
...
memcpy(&amp;dval,ival,sizeof(double));
cout&lt;&lt;dval;
</code></pre>
</blockquote>
<p>Danke. Ich werde es mal versuchen einzubauen.</p>
<p>Florian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316802</guid><dc:creator><![CDATA[floriank]]></dc:creator><pubDate>Mon, 02 Jul 2007 11:53:04 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 11:54:35 GMT]]></title><description><![CDATA[<p>floriank schrieb:</p>
<blockquote>
<pre><code class="language-cpp">double k = 1.2345;  
unsigned int komp*;

memcpy( &amp;komp, &amp;k, sizeof(double) );
</code></pre>
</blockquote>
<p>pass auf mit sowas. du kopierst den inhalt von k hier in nicht allozierten speicher. vergleich das mit cstolls beispiel von eben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316804</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Mon, 02 Jul 2007 11:54:35 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 12:09:16 GMT]]></title><description><![CDATA[<p>thordk schrieb:</p>
<blockquote>
<p>pass auf mit sowas. du kopierst den inhalt von k hier in nicht allozierten speicher. vergleich das mit cstolls beispiel von eben.</p>
</blockquote>
<p>Viel schlimmer, er multipliziert eine Variablendefinition mit dem Ende der Zeile <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>*scnr*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316818</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 02 Jul 2007 12:09:16 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 12:19:35 GMT]]></title><description><![CDATA[<p>naja, und eigentlich versucht er auch den inhalt von k dahin zu schreiben, wo die adresse von komp steht (wenn man mal annimmt, dass die zeile richtig wär). aber das sind spitzfindigkeiten <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316829</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Mon, 02 Jul 2007 12:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 12:20:58 GMT]]></title><description><![CDATA[<p>thordk schrieb:</p>
<blockquote>
<p>floriank schrieb:</p>
<blockquote>
<pre><code class="language-cpp">double k = 1.2345;  
unsigned int komp*;

memcpy( &amp;komp, &amp;k, sizeof(double) );
</code></pre>
</blockquote>
<p>pass auf mit sowas. du kopierst den inhalt von k hier in nicht allozierten speicher. vergleich das mit cstolls beispiel von eben.</p>
</blockquote>
<p>den Speicher habe ich schon alloziert:</p>
<pre><code class="language-cpp">komp = (unsigned int*) calloc(sizeof (unsigned int), 2);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1316830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316830</guid><dc:creator><![CDATA[floriank]]></dc:creator><pubDate>Mon, 02 Jul 2007 12:20:58 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 12:22:50 GMT]]></title><description><![CDATA[<p>yikes, warum schreibst nich einfach unsigned komp[2]; ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316832</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Mon, 02 Jul 2007 12:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 12:44:07 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>das richtige bekomme ich immer noch nicht zurück. Ich mache folgendes:</p>
<pre><code class="language-cpp">double data_double;
unsigned int* original;
original = (unsigned int*) calloc(sizeof (unsigned int), 2);
original = konvertierung_double (data_double);

unsigned int* konvertierung_double(double original)
{
    unsigned int* o;
    o = (unsigned int*) calloc(sizeof (unsigned int), 2);

    // Fall original ist positiv (inkl. +0)

    if (original &gt;= 0 )
    {
	original *= (-1) ;
        // float wird als unsigned int interpretiert
	memcpy(o,&amp;original,sizeof(double));
    }

    // Fall original ist negativ (inkl. -0)

    else
    {
        // Konvertierung in ein unsigned int
	memcpy(o,&amp;original,sizeof(double));
        // alle Bits werden einzeln negiert
        o[0]=~o[0];
    }
    // Rückgabe des Wertes nach der Konvertierung
    return(o);
}
double unkomp_double;
unkomp_double= konvertierunginverse_double(original);

double konvertierunginverse_double(unsigned int* komp)
{

	double* k;
	k = (double*) calloc(sizeof (unsigned int), 1);

	// Fall original ist positiv (inkl. +0)

	unsigned int positiv = potenzieren(2,31);
	if (komp[0] &gt;= positiv )
	{
		// float wird als unsigned int interpretiert
		komp[0] = komp[0] - positiv;
		memcpy(k,komp,sizeof(double));
	}

	// Fall original ist negativ (inkl. -0)

	else
	{
		komp[0] = ~komp[0];
		// Konvertierung in ein unsigned int
		memcpy(k,komp,sizeof(double));

	}
	// Rückgabe des Wertes nach der Konvertierung
	return(k[0]);
}
</code></pre>
<p>Normalerweise sollte nun unkomp_double=data_double</p>
<p>Ist es aber nicht. Mache ich noch etwas falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316848</guid><dc:creator><![CDATA[floriank]]></dc:creator><pubDate>Mon, 02 Jul 2007 12:44:07 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 13:12:02 GMT]]></title><description><![CDATA[<p>Erstmal hast du da ein Memory-Leck in der Funktion (bzw. der vor dem Funktionseintritt angeforderte Speicher verschwindet im Nirvana).</p>
<p>Und zweitens: Bist du sicher, daß die Bit-Anpassungen in den Funktionen auch zueinander passen? (vereinfache mal den Test, indem du die Fallunterscheidungen 'if(original&gt;=0)...' bzw. 'if(komp[0]&gt;=positiv)' weglässt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316859</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 02 Jul 2007 13:12:02 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 13:23:16 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Und zweitens: Bist du sicher, daß die Bit-Anpassungen in den Funktionen auch zueinander passen? (vereinfache mal den Test, indem du die Fallunterscheidungen 'if(original&gt;=0)...' bzw. 'if(komp[0]&gt;=positiv)' weglässt)</p>
</blockquote>
<p>ja da bin ich mir eigentlich sicher. Zumindest stimmen diese, wenn es sich um floats handelt und somit der zweite Teil (also komp[1] usw. wegfällt).</p>
<p>Warum verschwindet der Speicherplatz? Wird der in der Funktion nicht mit übernommen, wenn doch der Zeiger mit übergeben wird?</p>
<p>Vielleicht verwirren die Bezeichnungen etwas. Ich habe das aus einem großen Programm herauskopiert. Ich bin mir eben nur sicher, daß es dazwischen alles funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316864</guid><dc:creator><![CDATA[floriank]]></dc:creator><pubDate>Mon, 02 Jul 2007 13:23:16 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 13:44:18 GMT]]></title><description><![CDATA[<p>floriank schrieb:</p>
<blockquote>
<p>ja da bin ich mir eigentlich sicher. Zumindest stimmen diese, wenn es sich um floats handelt und somit der zweite Teil (also komp[1] usw. wegfällt).</p>
</blockquote>
<p>Wenn der Zeiger übergeben wird, ja. Aber du übergibst ja nicht den Zeiger, der im Hauptprogramm mit Speicher versorgt wurde, sondern legst in der Funktion neuen Speicher an, der zurückgegeben wird.</p>
<p>Edit: Und daß die Umwandlungen mit floats klappen, beweist noch lange nichts über double's <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/1316879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316879</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 02 Jul 2007 13:44:18 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit reinterpret_cast&amp;lt;double*&amp;gt; on Mon, 02 Jul 2007 14:10:38 GMT]]></title><description><![CDATA[<p>Müßtes denn dann eigentlich nicht klappen, wenn ich aus den Zeigern arrays[2] mache?</p>
<p>Nur das funktioniert auch nicht.</p>
<p>Also anstatt:</p>
<pre><code class="language-cpp">unsigned int* original;
original = (unsigned int*) calloc(sizeof (unsigned int), 2);
</code></pre>
<pre><code class="language-cpp">unsigned int original[2];
</code></pre>
<p>usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316899</guid><dc:creator><![CDATA[floriank]]></dc:creator><pubDate>Mon, 02 Jul 2007 14:10:38 GMT</pubDate></item></channel></rss>