<?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[float: bytes einzeln auslesen und in integer verwandeln ?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe einen buffer mit 10 float Werten.<br />
Dieser Buffer wird einmal ausgelesen und kann nicht einzeln<br />
übergeben werden. Also alle 10 floats kommen mit einem Schwung.</p>
<p>Nun kommt es aber vor, das der ausgelesene buffer als erstes<br />
eine integer Zahl besitzt, die eine Art Index darstellt.<br />
Dieses erkenne ich an einem bestimmten Flag, das in diesem Buffer ist.<br />
Nachdem ich aber beim Auslesen nur floats nehmen kann, muss ich<br />
aus den 4 bytes des floats einen integer mit ebenfalls 4 bytes machen.<br />
Ich möchte also die 4 bytes des floats 1:1 in die 4 possitionen des<br />
Integers kopieren.</p>
<p>nur wie ? es handelt sich hier nicht um casten oder &quot;=&quot;.</p>
<pre><code>float a;
int b;
b[0]=a[0];
b[1]=a[1];
b[2]=a[2];
b[3]=a[3];
</code></pre>
<p>oder kann man das mit Zeigern machen ? wie ?</p>
<p>Gruß<br />
thenoname</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/147110/float-bytes-einzeln-auslesen-und-in-integer-verwandeln</link><generator>RSS for Node</generator><lastBuildDate>Sun, 05 Apr 2026 15:08:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/147110.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 May 2006 01:19:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to float: bytes einzeln auslesen und in integer verwandeln ? on Sun, 14 May 2006 10:23:36 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe einen buffer mit 10 float Werten.<br />
Dieser Buffer wird einmal ausgelesen und kann nicht einzeln<br />
übergeben werden. Also alle 10 floats kommen mit einem Schwung.</p>
<p>Nun kommt es aber vor, das der ausgelesene buffer als erstes<br />
eine integer Zahl besitzt, die eine Art Index darstellt.<br />
Dieses erkenne ich an einem bestimmten Flag, das in diesem Buffer ist.<br />
Nachdem ich aber beim Auslesen nur floats nehmen kann, muss ich<br />
aus den 4 bytes des floats einen integer mit ebenfalls 4 bytes machen.<br />
Ich möchte also die 4 bytes des floats 1:1 in die 4 possitionen des<br />
Integers kopieren.</p>
<p>nur wie ? es handelt sich hier nicht um casten oder &quot;=&quot;.</p>
<pre><code>float a;
int b;
b[0]=a[0];
b[1]=a[1];
b[2]=a[2];
b[3]=a[3];
</code></pre>
<p>oder kann man das mit Zeigern machen ? wie ?</p>
<p>Gruß<br />
thenoname</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057368</guid><dc:creator><![CDATA[thenoname]]></dc:creator><pubDate>Sun, 14 May 2006 10:23:36 GMT</pubDate></item><item><title><![CDATA[Reply to float: bytes einzeln auslesen und in integer verwandeln ? on Sun, 14 May 2006 07:55:22 GMT]]></title><description><![CDATA[<p>Kurz und knackig - standardkonform lässt sich das nicht lösen.</p>
<p>Es gibt für jede Plattform, jeden Compiler etc. immer Mmittel und Wege das hinzubekommen, aber der Sprachstandard legt kein speicherinternes Format für Floats/Integers fest.</p>
<p>Außerdem erscheint mir das &quot;Protokoll&quot;, das du da entworfen hast nicht besonders gut. Du rätst anhand eines Flags eine bestimmte Bedeutung. Was ist, wenn dieses Flag auch in den Daten vorkommt?</p>
<p>Hast du dieses Protokoll denn selbst entworfen oder ist es Vorgabe? Erklär doch mal bitte ein bisschen genauer, was du vorhast, dann wirst du auch geholfen. <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/1057392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057392</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Sun, 14 May 2006 07:55:22 GMT</pubDate></item><item><title><![CDATA[Reply to float: bytes einzeln auslesen und in integer verwandeln ? on Sun, 14 May 2006 08:36:22 GMT]]></title><description><![CDATA[<p>man kann doch aber sowas machen, falls es das is, was du meinst</p>
<pre><code class="language-cpp">// flag ist im buffer -&gt; index auslesen:
float bufer[10];

int index = *((int*)(&amp;buffer[0]));
</code></pre>
<p>also die addresse des ersten floats wird als zeiger auf einen int interpretiert und dann nach int dereferenziert.<br />
ich glaub mit nem c++-cast wie reinterpret_cast oder so geht das auch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057403</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Sun, 14 May 2006 08:36:22 GMT</pubDate></item><item><title><![CDATA[Reply to float: bytes einzeln auslesen und in integer verwandeln ? on Sun, 14 May 2006 10:38:49 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Maxi, das ist es !!<br />
Ich glaube es ist keine Schande, wenn ich solch einen Aufbau<br />
mit der Referenziererei noch nicht ganz verstehe ?</p>
<p>Leider ist die Bufferübergabe in der Tat etwas Bescheiden aufgebaut.<br />
In dem ersten float wird das Flag mitgeliefert, ab dem zweiten beginnt dann<br />
das Datenpacket. Nachdem man sich bei der Übergabe allerdings vorher ent-<br />
scheiden muss, was für eine Struktur man benutzt, wird es kompliziert.<br />
Der Erfinder hat wohl damit gerrechnet, das man aus den einzelnen<br />
bytes dannach seine floats zusammenbastelt.</p>
<p>Ich denke das wäre dann so möglich ?</p>
<pre><code>bytes[4]={1,2,3,4};

float wert = *((float*)(&amp;bytes));
</code></pre>
<p>Wird bei der Referenziererei dann eigentlich eine &quot;virtuelle&quot; float erzeugt,<br />
diese mit dem &amp;bytes gefüllt und dann =wert gesetzt ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057474</guid><dc:creator><![CDATA[thenoname]]></dc:creator><pubDate>Sun, 14 May 2006 10:38:49 GMT</pubDate></item><item><title><![CDATA[Reply to float: bytes einzeln auslesen und in integer verwandeln ? on Sun, 14 May 2006 12:09:15 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>vielleicht wird Maxis' Code mit einem C++-Cast leichter zu verstehen sein:</p>
<pre><code class="language-cpp">// flag ist im buffer -&gt; index auslesen:
float buffer[10];

int index = *(reinterpret_cast&lt;int*&gt;(&amp;buffer[0]));
</code></pre>
<p>Es wird hier die Speicherstelle &amp;buffer[0] nach *int umgewandelt, sodass int index dann von dem Anfang des Arrays sizeof(<strong>int</strong>) Bytes ausliest (Zeigerarithmetik).</p>
<p>Gruß <a href="http://www.orel.net.tc/" rel="nofollow">Borschtsch</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057517</guid><dc:creator><![CDATA[Borschtsch]]></dc:creator><pubDate>Sun, 14 May 2006 12:09:15 GMT</pubDate></item><item><title><![CDATA[Reply to float: bytes einzeln auslesen und in integer verwandeln ? on Sun, 14 May 2006 18:57:36 GMT]]></title><description><![CDATA[<p>Hmm, reicht für diese Methode nicht ein static_cast? reinterpret_cast müsste man doch nur nehmen, wenn man float (nicht float*) casten will:</p>
<pre><code class="language-cpp">float buffer[10];

int index = *(static_cast&lt;int*&gt;(&amp;buffer[0])); // 1.

index = reinterpret_cast&lt;int&gt; (buffer[0]); // 2. VIEL kürzer
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1057749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057749</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Sun, 14 May 2006 18:57:36 GMT</pubDate></item><item><title><![CDATA[Reply to float: bytes einzeln auslesen und in integer verwandeln ? on Sun, 14 May 2006 21:05:31 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Hmm, reicht für diese Methode nicht ein static_cast? reinterpret_cast müsste man doch nur nehmen, wenn man float (nicht float*) casten will:</p>
<pre><code class="language-cpp">float buffer[10];

int index = *(static_cast&lt;int*&gt;(&amp;buffer[0])); // 1.

index = reinterpret_cast&lt;int&gt; (buffer[0]); // 2. VIEL kürzer
</code></pre>
</blockquote>
<p>das dürfte kein compiler akzeptieren. ein static_cast anstelle des reinterpret_cast wäre möglich, hat aber einen ganz anderen als den gewünschten effekt. ein reinterpret_Cast ist in jdem falle nötig (es sei denn man geht den umweg über void*). denkbar ist:</p>
<pre><code class="language-cpp">float buffer[10];

    int index = reinterpret_cast&lt;int&amp;&gt;(buffer[0]);

    index = *reinterpret_cast&lt;int*&gt;(&amp;buffer[0]);
</code></pre>
<p>letzlich handelt es sich immer um implementationsspezifisches verhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057814</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 14 May 2006 21:05:31 GMT</pubDate></item><item><title><![CDATA[Reply to float: bytes einzeln auslesen und in integer verwandeln ? on Mon, 15 May 2006 06:16:16 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Casts sollten, wann es nur geht, vermieden werden. Daher wäre wohl eine Möglichkeit vorzuziehen die ohne &quot;rumcasten&quot; funktioniert.</p>
<pre><code class="language-cpp">union flint
{
	float fValue;
	int	  nValue;
};

int main( void )
{
	float f[] = { 10.0f, 20.0f, 30.0f };
	flint p;

	for ( int i = 0; i &lt; 3; ++i )
	{
		p.fValue = f[ i ];
		std::cout &lt;&lt; p.nValue &lt;&lt; std::endl;
	}

	return 0;
}
</code></pre>
<p>Etwas das in diese Richtung geht wäre z.B. möglich.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057867</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 15 May 2006 06:16:16 GMT</pubDate></item><item><title><![CDATA[Reply to float: bytes einzeln auslesen und in integer verwandeln ? on Mon, 15 May 2006 07:21:35 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Casts sollten, wann es nur geht, vermieden werden. Daher wäre wohl eine Möglichkeit vorzuziehen die ohne &quot;rumcasten&quot; funktioniert.</p>
</blockquote>
<p>Und was ist an type-punning besser als an Casten? Zumal solche &quot;union-casts&quot; nicht spezifiziertes Verhalten haben.</p>
<p>Du versteckst nicht nur den (Reinterpret-)Cast, der sowieso durchgeführt wird, sondern du nimmst dem Compiler jede Möglichkeit dich über Fehler zu informieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1057882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057882</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Mon, 15 May 2006 07:21:35 GMT</pubDate></item></channel></rss>