<?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[vector zu int]]></title><description><![CDATA[<p>Ich habe einen Vector dessen Inhalt empfangene Bytes aus einer Übertragung sind.<br />
Entweder ist in vecBytes[0] das LSB oder das MSB, was ich aber weiß.</p>
<p>Gehen wir jetzt einfach davon aus, dass der Vector in einen int64 umgewandelt werden soll. Mein Ansatz;</p>
<pre><code>std::int64_t* value // Funktionsparameter

*value = 0;
memcpy(value, vecBytes.data(), vecBytes.size());
</code></pre>
<p>Das ist aber eher c-Style. Deswegen habe ich folgendes versucht:</p>
<pre><code>std::int64_t* value // Funktionsparameter

*value = 0;
std::copy(vecBytes.begin(), vecBytes.end(), value);
</code></pre>
<p><strong>1.) Frage:</strong><br />
Hier wird aber lediglich das erste Byte kopiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> ? Warum?</p>
<p><strong>2.) Frage</strong><br />
Wird std::copy deutlich langsamer sein, weil hier Iteratoren in einer while-Schleife in copy verwendet werden? Ich meine memcpy ist hier ja absolut schnell, da über data direkt auf die Daten zugegriffen werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326015/vector-zu-int</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 16:18:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326015.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 May 2014 10:41:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector zu int on Wed, 28 May 2014 10:41:25 GMT]]></title><description><![CDATA[<p>Ich habe einen Vector dessen Inhalt empfangene Bytes aus einer Übertragung sind.<br />
Entweder ist in vecBytes[0] das LSB oder das MSB, was ich aber weiß.</p>
<p>Gehen wir jetzt einfach davon aus, dass der Vector in einen int64 umgewandelt werden soll. Mein Ansatz;</p>
<pre><code>std::int64_t* value // Funktionsparameter

*value = 0;
memcpy(value, vecBytes.data(), vecBytes.size());
</code></pre>
<p>Das ist aber eher c-Style. Deswegen habe ich folgendes versucht:</p>
<pre><code>std::int64_t* value // Funktionsparameter

*value = 0;
std::copy(vecBytes.begin(), vecBytes.end(), value);
</code></pre>
<p><strong>1.) Frage:</strong><br />
Hier wird aber lediglich das erste Byte kopiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> ? Warum?</p>
<p><strong>2.) Frage</strong><br />
Wird std::copy deutlich langsamer sein, weil hier Iteratoren in einer while-Schleife in copy verwendet werden? Ich meine memcpy ist hier ja absolut schnell, da über data direkt auf die Daten zugegriffen werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2401210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2401210</guid><dc:creator><![CDATA[Vectorianer]]></dc:creator><pubDate>Wed, 28 May 2014 10:41:25 GMT</pubDate></item><item><title><![CDATA[Reply to vector zu int on Wed, 28 May 2014 11:28:08 GMT]]></title><description><![CDATA[<p>Wenn schon, dann besser</p>
<pre><code class="language-cpp">*value = reinterpret_cast&lt;std::int64_t&gt;(vecBytes.data());
</code></pre>
<p>Bei dem copy zerschießt du dir den Speicher, denn der 3. Parameter wird als Output-Iterator verwendet: <a href="http://www.cplusplus.com/reference/algorithm/copy/" rel="nofollow">copy</a><br />
Du müßtest auch hier den 3. Parameter als &quot;char *&quot; casten.</p>
<p>Auch memcpy verwendet intern eine Schleife, nur daß diese so optimiert ist, daß sie möglichst große Blöcke (entsprechend der Registerbreite) kopiert. Dafür ist aber der Prefix und Postfix-Code wegen dem Alignment etwas umfangreicher.</p>
<p>Edit: irgendwie lauert heute hier der Schreibteufel...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2401217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2401217</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 28 May 2014 11:28:08 GMT</pubDate></item><item><title><![CDATA[Reply to vector zu int on Wed, 28 May 2014 11:24:41 GMT]]></title><description><![CDATA[<p>Vectorianer schrieb:</p>
<blockquote>
<pre><code>std::int64_t* value // Funktionsparameter

*value = 0;
std::copy(vecBytes.begin(), vecBytes.end(), value);
</code></pre>
<p><strong>1.) Frage:</strong><br />
Hier wird aber lediglich das erste Byte kopiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> ? Warum?</p>
</blockquote>
<p>es werden alle Bytes kopiert, nur nicht dahin, wo Du meinst. Das zweite Byte landet bei <code>*(value+1)</code> - also in einem <code>std::int64_t</code> -Wert, der hinter dem steht, auf den <code>value</code> zeigt.</p>
<p>Abhilfe:</p>
<pre><code>std::int64_t* value // Funktionsparameter
*value = 0; // sollte unnötig sein; besser: assert( vecBytes.size(), sizeof(std::int64) );
std::copy(vecBytes.begin(), vecBytes.end(), reinterpret_cast&lt; char* &gt;(value) );
</code></pre>
<p>Vectorianer schrieb:</p>
<blockquote>
<p><strong>2.) Frage</strong><br />
Wird std::copy deutlich langsamer sein, weil hier Iteratoren in einer while-Schleife in copy verwendet werden? Ich meine memcpy ist hier ja absolut schnell, da über data direkt auf die Daten zugegriffen werden kann.</p>
</blockquote>
<p>Vertraue den Leuten, die für Dich die Implementierung der Standard-Algorithmen geschrieben haben! - es muss gar nicht langsamer sein, kann aber.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2401220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2401220</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 28 May 2014 11:24:41 GMT</pubDate></item><item><title><![CDATA[Reply to vector zu int on Wed, 28 May 2014 11:49:24 GMT]]></title><description><![CDATA[<p>Vielen Dank, jetzt sehe ich den Fehler beim Pointer auch... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2401224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2401224</guid><dc:creator><![CDATA[Vectorianer]]></dc:creator><pubDate>Wed, 28 May 2014 11:49:24 GMT</pubDate></item><item><title><![CDATA[Reply to vector zu int on Wed, 28 May 2014 17:04:20 GMT]]></title><description><![CDATA[<p>Höchstwahrscheinlich wird std::copy übrigens zu einem memcpy, weil entweder die Implementierung von std::copy selbst erkennt, dass da PODs kopiert werden (mittels Templatemagie) oder weil der Optimierer die von einem naiv implementierten std::copy erzeugte Schleife als ein selbstgeschriebenes memcpy erkennt und durch die interne Version ersetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2401269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2401269</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 28 May 2014 17:04:20 GMT</pubDate></item></channel></rss>