<?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[Stellen eines unsigned int&#x27;s extrahieren...]]></title><description><![CDATA[<p>Hi,</p>
<p>Kennst ihr eine Möglichkeit an die einzelnen Stellen eines Integers heranzukommen ?<br />
Dies muss aber möglichst effizient geschehen, da /10 (als Beispiel) doch zu lange dauert, da ich diese 'Trennung' seht oft (Schleife) durchführen muss.</p>
<p>Mal einn kleineses beispiel:</p>
<pre><code class="language-cpp">int i = 345477;
short pos3; // hier soll nun die Zahl 5 drin stehen ;) .
</code></pre>
<p>Danke schonmal!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170333/stellen-eines-unsigned-int-s-extrahieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 02:48:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170333.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 Jan 2007 15:59:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Sun, 14 Jan 2007 15:59:03 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Kennst ihr eine Möglichkeit an die einzelnen Stellen eines Integers heranzukommen ?<br />
Dies muss aber möglichst effizient geschehen, da /10 (als Beispiel) doch zu lange dauert, da ich diese 'Trennung' seht oft (Schleife) durchführen muss.</p>
<p>Mal einn kleineses beispiel:</p>
<pre><code class="language-cpp">int i = 345477;
short pos3; // hier soll nun die Zahl 5 drin stehen ;) .
</code></pre>
<p>Danke schonmal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209766</guid><dc:creator><![CDATA[&amp;lt;&amp;lt; Digit]]></dc:creator><pubDate>Sun, 14 Jan 2007 15:59:03 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Sun, 14 Jan 2007 16:16:07 GMT]]></title><description><![CDATA[<p>So müsste es gehen:</p>
<pre><code class="language-cpp">unsigned int i = 345477;
char *cp = reinterpret_cast&lt;char*&gt; (&amp;i);

short s = cp[2];  //bzw. char s, je nach Notwendigkeit
</code></pre>
<p>nach der Zuweisung von cp, zeigt cp auf das Low-Order byte von i, also auf das byte, das für die Einser-Stelle zuständig ist. cp[1] wäre dann das byte, das für die 256-Stelle zuständig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209775</guid><dc:creator><![CDATA[ne0r]]></dc:creator><pubDate>Sun, 14 Jan 2007 16:16:07 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Sun, 14 Jan 2007 16:16:16 GMT]]></title><description><![CDATA[<p>(int)(log(x) + 1)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209776</guid><dc:creator><![CDATA[Benutzername:]]></dc:creator><pubDate>Sun, 14 Jan 2007 16:16:16 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Sun, 14 Jan 2007 16:17:52 GMT]]></title><description><![CDATA[<p>ich dachte du wolltest wissen wieviel stellen die zahl hat</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209777</guid><dc:creator><![CDATA[Benutzername:]]></dc:creator><pubDate>Sun, 14 Jan 2007 16:17:52 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Sun, 14 Jan 2007 17:29:04 GMT]]></title><description><![CDATA[<p>warum sollte (x/1000)%10 zu lange dauern? Ist das alles was dein Programm macht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209816</guid><dc:creator><![CDATA[sag mal]]></dc:creator><pubDate>Sun, 14 Jan 2007 17:29:04 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Sun, 14 Jan 2007 18:40:35 GMT]]></title><description><![CDATA[<p>Ups, ich dachte du meintest nicht Dezimalstellen, sondern Stellen in binär...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209856</guid><dc:creator><![CDATA[ne0r]]></dc:creator><pubDate>Sun, 14 Jan 2007 18:40:35 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Sun, 14 Jan 2007 19:05:47 GMT]]></title><description><![CDATA[<pre><code>unsigned int i = 345477;
char *cp = reinterpret_cast&lt;char*&gt; (&amp;i);

short s = cp[2];  //bzw. char s, je nach Notwendigkeit
</code></pre>
<p>WTF?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209868</guid><dc:creator><![CDATA[jesses]]></dc:creator><pubDate>Sun, 14 Jan 2007 19:05:47 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Sun, 14 Jan 2007 19:44:39 GMT]]></title><description><![CDATA[<p>wenn division zu langsam ist: <a href="http://www.hackersdelight.org/divcMore.pdf" rel="nofollow">http://www.hackersdelight.org/divcMore.pdf</a><br />
<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/1209886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209886</guid><dc:creator><![CDATA[ten]]></dc:creator><pubDate>Sun, 14 Jan 2007 19:44:39 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Sun, 14 Jan 2007 20:06:18 GMT]]></title><description><![CDATA[<p>Ich kann mir nicht Vorstellen dass eine Division zu langsam ist. Wenn dem so ist, dann wirst du einen anderen Algorithmus finden muessen. Wenn du trotzdem auf diesem Weg weitergehen willst bleibt dir als einzige sinnvolle Moeglichkeit, deine Zahl vor der Schleife in einen String abzuspeichern.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14758">@ten</a>: glaubst du nicht ein vernuenftiger Compiler macht das selbst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209897</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Sun, 14 Jan 2007 20:06:18 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Sun, 14 Jan 2007 20:13:04 GMT]]></title><description><![CDATA[<p>Blue-Tiger schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14758">@ten</a>: glaubst du nicht ein vernuenftiger Compiler macht das selbst?</p>
</blockquote>
<p>vielleicht bei cpu's die keine 'div' instruction haben, sonst eher nicht.<br />
aber ein eingebautes div kann auch sehr langsam sein...<br />
<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/1209905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209905</guid><dc:creator><![CDATA[ten]]></dc:creator><pubDate>Sun, 14 Jan 2007 20:13:04 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Sun, 14 Jan 2007 20:37:41 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28733">@jesse</a>:</p>
<p>der char-pointer (bzw. byte-pointer, da ein char genau einem byte entspricht) zeigt in diesem Beispiel genau auf das dritte byte des unsigned ints. (ok, es sollte lieber ein unsigned char* sein) damit kann man bytes aus einzelnen Variablen extrahieren, sollte das nötig sein.</p>
<p>Ok, einfacher wäre, sofern man nicht alle bytes in einzelne chars umlagern will:</p>
<pre><code class="language-cpp">const unsigned char bytenum = 3;
unsigned char c;
int i = 12345;

c = static_cast&lt;unsigned char&gt; (i &gt;&gt; (bytenum-1)*8);
</code></pre>
<p>Bei einer Zuweisung von int nach (u-)char werden alle bis auf das Low-Order Byte abgeschnitten. Man verschiebe die bits von i also um bytenum-1 nach Rechts, um das bytenum-ste Byte zu extrahieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209924</guid><dc:creator><![CDATA[ne0r]]></dc:creator><pubDate>Sun, 14 Jan 2007 20:37:41 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Sun, 14 Jan 2007 21:31:09 GMT]]></title><description><![CDATA[<p>ne0r schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28733">@jesse</a>:</p>
<p>der char-pointer (bzw. byte-pointer, da ein char genau einem byte entspricht) zeigt in diesem Beispiel genau auf das dritte byte des unsigned ints. (ok, es sollte lieber ein unsigned char* sein) damit kann man bytes aus einzelnen Variablen extrahieren, sollte das nötig sein.</p>
<p>Ok, einfacher wäre, sofern man nicht alle bytes in einzelne chars umlagern will:</p>
<pre><code class="language-cpp">const unsigned char bytenum = 3;
unsigned char c;
int i = 12345;

c = static_cast&lt;unsigned char&gt; (i &gt;&gt; (bytenum-1)*8);
</code></pre>
<p>Bei einer Zuweisung von int nach (u-)char werden alle bis auf das Low-Order Byte abgeschnitten. Man verschiebe die bits von i also um bytenum-1 nach Rechts, um das bytenum-ste Byte zu extrahieren.</p>
</blockquote>
<p>Glaubst du echt daran dass das funktioniert? <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="🙂"
    /> Wenn dann musst du das tatsächlich erst in einen String umwandeln, z.B. so:</p>
<pre><code class="language-cpp">char c = lexical_cast&lt; std::string, int &gt;( i )[ 3 ];
</code></pre>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209949</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Sun, 14 Jan 2007 21:31:09 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Sun, 14 Jan 2007 22:18:03 GMT]]></title><description><![CDATA[<p>Jo ich danke erstmal allen Helfenden...!!!!</p>
<p>Aber werde das warscheinlich doch mit einfacher (Modulo-)Division machen <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>Aber noch eine kleine Frage:<br />
Wie komme ich an die Stellen eines long double wertes heran ?</p>
<p>Also Beispiel:</p>
<pre><code>long double wert = 457756.4562;
short teilnk3 = ...; // hier soll 6 drinstehen
// oder:
short teilvk4 = ...; // hier soll 7 drinstehen
</code></pre>
<p><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/1209960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209960</guid><dc:creator><![CDATA[&amp;lt;&amp;lt; Digit]]></dc:creator><pubDate>Sun, 14 Jan 2007 22:18:03 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Mon, 15 Jan 2007 03:17:27 GMT]]></title><description><![CDATA[<p>Ähm...<br />
warum nicht sowas:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
unsigned long get_num_digits( const T &amp;value ) {

    std::stringstream ss;

    ss &lt;&lt; static_cast&lt; int &gt;( value );
    return ss.str( ).length( );
}
</code></pre>
<p>??</p>
<p>Ich befürchte sogar, dass das schneller ist als jegliche herumrechnerei...</p>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209996</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Mon, 15 Jan 2007 03:17:27 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Mon, 15 Jan 2007 07:23:38 GMT]]></title><description><![CDATA[<p>Glaube ich nicht. Oder glaubst du, dass Stringstreams zaubern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210028</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Mon, 15 Jan 2007 07:23:38 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Mon, 15 Jan 2007 13:31:39 GMT]]></title><description><![CDATA[<p>Danke, aber mir geht es nicht um die Stellenanzahl, sondern um die Ziffer an einer bestimmten Position <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/1210245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210245</guid><dc:creator><![CDATA[&amp;lt;&amp;lt; Digit]]></dc:creator><pubDate>Mon, 15 Jan 2007 13:31:39 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Mon, 15 Jan 2007 13:35:43 GMT]]></title><description><![CDATA[<p>Um an eine bestimmte Stelle zu gelangen, hast du doch schon eine Methode (und die lässt sich auch für die Nachkommastellen anwenden:</p>
<pre><code class="language-cpp">int stelle = (int)(zahl/pow(10,pos)) % 10;
</code></pre>
<p>(für die Stellen nach dem Komma setzt du entsprechend negative Werte für 'pos' ein (pos=0 ergibt die Einer, pos=3 die Tausender, pos=-3 die Tausendstel-Stelle))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210247</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 15 Jan 2007 13:35:43 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Mon, 15 Jan 2007 15:07:27 GMT]]></title><description><![CDATA[<p>Hi und danke^^</p>
<p>Gibts da auch ne Möglichkeitt ohne pow (würde das gerne auf elementarer Ebene lösen <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/1210307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210307</guid><dc:creator><![CDATA[&amp;lt;&amp;lt; Digit]]></dc:creator><pubDate>Mon, 15 Jan 2007 15:07:27 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Mon, 15 Jan 2007 15:16:22 GMT]]></title><description><![CDATA[<p>&lt;&lt; Digit schrieb:</p>
<blockquote>
<p>Hi und danke^^<br />
Gibts da auch ne Möglichkeitt ohne pow (würde das gerne auf elementarer Ebene lösen <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>ich hatte weiter oben ein kapitel aus einem buch gepostet. besorg dir dieses buch, da stehen solche sachen drin wie z.b. 'integer potenzieren ohne schleifen' und ähnliche bitschubsereien...<br />
<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/1210317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210317</guid><dc:creator><![CDATA[ten]]></dc:creator><pubDate>Mon, 15 Jan 2007 15:16:22 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Mon, 15 Jan 2007 15:52:49 GMT]]></title><description><![CDATA[<p>&lt;&lt; Digit schrieb:</p>
<blockquote>
<p>Hi und danke^^</p>
<p>Gibts da auch ne Möglichkeitt ohne pow (würde das gerne auf elementarer Ebene lösen <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>Auf elemtarer Ebene lässt sich das nunmal nur per &quot;Bit-Schubserei&quot; lösen. Also solltest du entweder ten's Ratschlag befolgen, oder selbst im Internet nach bestimmten Tutorials suchen, da findest du sicher was.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10754">@David_pb</a>:<br />
Ich WEISS dass es funktioniert. Wenn du mir nicht glaubst, probier es aus. Ist an sich einfachstes bitweises Operieren:</p>
<p>i sei mal: 00000000 00000001 00000010 00001111 (die Wahl des Wertes ist willkürlich)</p>
<p>nun verschieben wir i um 8*1 nach rechts, um das 2te Byte zu bekommen:</p>
<p>i: 00000000 00000000 00000001 00000010</p>
<p>dann static_cast&lt;unsigned char&gt; (i) :<br />
00000010<br />
(static_cast, bzw. cast allgemein schneidet alle größeren Stellen so zu sagen ab.)</p>
<p>Ich sehe darin kein Problem. Auch benutze ich das bei meiner (auf dem 256-System basierenden) Klasse für große Zahlen, und die funktioniert bisher einwandfrei (jedenfalls das, was ich davon bereits implementiert habe).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210335</guid><dc:creator><![CDATA[ne0r]]></dc:creator><pubDate>Mon, 15 Jan 2007 15:52:49 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Mon, 15 Jan 2007 16:45:12 GMT]]></title><description><![CDATA[<p>ne0r schrieb:</p>
<blockquote>
<p>&lt;&lt; Digit schrieb:</p>
<blockquote>
<p>Hi und danke^^</p>
<p>Gibts da auch ne Möglichkeitt ohne pow (würde das gerne auf elementarer Ebene lösen <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>Auf elemtarer Ebene lässt sich das nunmal nur per &quot;Bit-Schubserei&quot; lösen. Also solltest du entweder ten's Ratschlag befolgen, oder selbst im Internet nach bestimmten Tutorials suchen, da findest du sicher was.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10754">@David_pb</a>:<br />
Ich WEISS dass es funktioniert. Wenn du mir nicht glaubst, probier es aus. Ist an sich einfachstes bitweises Operieren:</p>
<p>i sei mal: 00000000 00000001 00000010 00001111 (die Wahl des Wertes ist willkürlich)</p>
<p>nun verschieben wir i um 8*1 nach rechts, um das 2te Byte zu bekommen:</p>
<p>i: 00000000 00000000 00000001 00000010</p>
<p>dann static_cast&lt;unsigned char&gt; (i) :<br />
00000010<br />
(static_cast, bzw. cast allgemein schneidet alle größeren Stellen so zu sagen ab.)</p>
<p>Ich sehe darin kein Problem. Auch benutze ich das bei meiner (auf dem 256-System basierenden) Klasse für große Zahlen, und die funktioniert bisher einwandfrei (jedenfalls das, was ich davon bereits implementiert habe).</p>
</blockquote>
<p>Du scheinst den ganzen Aufbau von Integer und Bytekette nicht ganz zu verstehen.<br />
Dein Code:</p>
<pre><code class="language-cpp">const unsigned char bytenum = 3;
unsigned char c;
int i = 12345;

c = static_cast&lt;unsigned char&gt; (i &gt;&gt; (bytenum-1)*8);
</code></pre>
<p>12345 im Binärsystem = 0011 0000 0011 1001b</p>
<p>Jetzt shiftest du 3-1 = 2 * 8 = 16 Bits nach rechts. Raus kommt:<br />
0000 0000 0000 0000b das dann boch in ein Char konvertieren und du hast ein Char mit dem Wert 0. Wow, und sowas soll funktionieren! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":-P"
      alt="😛"
    /></p>
<p>Würde jetzt jede Komponente ein Byte (in diesem Fall 8 Bit) im int belegen würde deine Idee funktionieren, so wie's aber ist tut das ganze nicht...</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210363</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 15 Jan 2007 16:45:12 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Mon, 15 Jan 2007 18:19:09 GMT]]></title><description><![CDATA[<p>Probiers halt einfach aus.</p>
<p>Erstens besteht ein byte aus 8 bit. Damit ist deine Darstellung nicht ganz richtig, das was du dargestellt hast sind 4 Nibble (2 Byte) (Bin mir nicht ganz sicher, ob das Nibble heisst <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=";D"
      alt="😉"
    /> ).<br />
Wenn du das ganze um 16 nach rechts shiftest, hast du natürlich 00000000 im char. Deine Darstellung benutzt ja auch einen short int (2 Byte), keinen normalen bzw, long int (= int). Ein int hat (bei mir) sizeof(int) = 4, also 4 byte (C++ ist byte-basiert). Bei Shift nach rechts um 16 bekommst du also das dritte byte.</p>
<p>Probier mal in einem unsigned int 256*256*256*255 zu speichern. Dann speicher mal 256*256*256*256. Vorher hast du so etwa 4 Milliarden, danach null. Warum? Es wird versucht ins fünfte byte zu schreiben (Ein byte hat die Wertemenge [0;255] ).</p>
<p>Bzw. Darstellung vorher:<br />
11111111 00000000 00000000 00000000</p>
<p>Danach:</p>
<p>(00000001) 00000000 00000000 00000000 00000000<br />
Das eingeklammerte byte existiert nicht. Ergo Wird der Wert des ints null.</p>
<p>Probier das jetzt bitte aus, bevor du mir wieder widersprichst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210410</guid><dc:creator><![CDATA[ne0r]]></dc:creator><pubDate>Mon, 15 Jan 2007 18:19:09 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Mon, 15 Jan 2007 18:30:11 GMT]]></title><description><![CDATA[<p>Ach ja:</p>
<p>Jetzt weiß ich, was du meintest, natürlich hast du Recht <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=";D"
      alt="😉"
    /><br />
12345 ist nur ein Beispielwert, genauso wie bytenum. Ich hab nicht darüber nachgedacht, ob das ganze null werden könnte <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=";D"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210415</guid><dc:creator><![CDATA[ne0r]]></dc:creator><pubDate>Mon, 15 Jan 2007 18:30:11 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Mon, 15 Jan 2007 19:14:03 GMT]]></title><description><![CDATA[<p>ne0r schrieb:</p>
<blockquote>
<p>Probiers halt einfach aus.</p>
<p>Erstens besteht ein byte aus 8 bit. Damit ist deine Darstellung nicht ganz richtig, das was du dargestellt hast sind 4 Nibble (2 Byte) (Bin mir nicht ganz sicher, ob das Nibble heisst <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=";D"
      alt="😉"
    /> ).<br />
Wenn du das ganze um 16 nach rechts shiftest, hast du natürlich 00000000 im char. Deine Darstellung benutzt ja auch einen short int (2 Byte), keinen normalen bzw, long int (= int). Ein int hat (bei mir) sizeof(int) = 4, also 4 byte (C++ ist byte-basiert). Bei Shift nach rechts um 16 bekommst du also das dritte byte.</p>
<p>Probier mal in einem unsigned int 256*256*256*255 zu speichern. Dann speicher mal 256*256*256*256. Vorher hast du so etwa 4 Milliarden, danach null. Warum? Es wird versucht ins fünfte byte zu schreiben (Ein byte hat die Wertemenge [0;255] ).</p>
<p>Bzw. Darstellung vorher:<br />
11111111 00000000 00000000 00000000</p>
<p>Danach:</p>
<p>(00000001) 00000000 00000000 00000000 00000000<br />
Das eingeklammerte byte existiert nicht. Ergo Wird der Wert des ints null.</p>
<p>Probier das jetzt bitte aus, bevor du mir wieder widersprichst.</p>
</blockquote>
<p>Um dich mal von deiner &quot;ich weiß alles&quot; Tour runterzubringen. Ich kenn mich mit den Thema zur genüge aus. Ich programmiere nicht erst seit Gestern und den Unsinn mach ich jeden Tag auf der Arbeit zur Genüge.</p>
<p>1. ein Byte ist <strong>nicht</strong> auf acht Bit festgelegt. Der Begriff Byte unterliegt zwar Kriterien, u.A. das es <strong>mindestens</strong> 8 Bit breit sein muss, aber es kann durchaus größer als 8 Bit sein.</p>
<p>2. Meine &quot;Darstellung&quot; ist sowohl als int (mindesten 16 Bit) als auch short int genau gleich. Auch wenn das int 32 Bit breit ist ist die Darstellung im Binärsystem die selbe, nur sind halt links noch weitere Nullen.</p>
<p>3. Egal ob du ein int (hier mal 32 Bit) oder ein short (hier mal 16 Bit) mit dem Wert 12345 um 16 Bit nach rechts shiftest, es wird <strong>immer</strong> den Wert 0 geben, ganz einfach weil das letzte gesetzte Bit in den 16 Bit enthalten ist.</p>
<p>4. Deine Idee würde dann funktionieren wenn jede Stelle der Zahl ein Byte belegen würde, das tut sie aber nicht, denn dann müsste deine Variable ja, in diesem Beispiel, 5 Byte groß sein.</p>
<p>ne0r  schrieb:</p>
<blockquote>
<p>Ach ja:</p>
<p>Jetzt weiß ich, was du meintest, natürlich hast du Recht <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=";D"
      alt="😉"
    /><br />
12345 ist nur ein Beispielwert, genauso wie bytenum. Ich hab nicht darüber nachgedacht, ob das ganze null werden könnte <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=";D"
      alt="😉"
    /></p>
</blockquote>
<p>Schön das dus trotzdem einsiehst. Deine Idee war zwar recht nett, ist aber nicht umsetzbar!</p>
<p>grüße</p>
<p>P.S.: Ich frage mich ob du deinen Code selbst ausprobiert hast. Das solltest du das nächste mal nämlich tun bevor du das anderen vorschlägst!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210434</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 15 Jan 2007 19:14:03 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Mon, 15 Jan 2007 19:21:14 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>1. ein Byte ist <strong>nicht</strong> auf acht Bit festgelegt. Der Begriff Byte unterliegt zwar Kriterien, u.A. das es <strong>mindestens</strong> 8 Bit breit sein muss, aber es kann durchaus größer als 8 Bit sein.</p>
</blockquote>
<p>'bytes' können auch weniger als 8 bits haben.<br />
dieses 8-bittige dingens schimpft sich 'octet'<br />
--&gt; <a href="http://en.wikipedia.org/wiki/Octet_%28computing%29" rel="nofollow">http://en.wikipedia.org/wiki/Octet_(computing)</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210440</guid><dc:creator><![CDATA[ten]]></dc:creator><pubDate>Mon, 15 Jan 2007 19:21:14 GMT</pubDate></item><item><title><![CDATA[Reply to Stellen eines unsigned int&#x27;s extrahieren... on Mon, 15 Jan 2007 19:37:01 GMT]]></title><description><![CDATA[<p>ten schrieb:</p>
<blockquote>
<p>David_pb schrieb:</p>
<blockquote>
<p>1. ein Byte ist <strong>nicht</strong> auf acht Bit festgelegt. Der Begriff Byte unterliegt zwar Kriterien, u.A. das es <strong>mindestens</strong> 8 Bit breit sein muss, aber es kann durchaus größer als 8 Bit sein.</p>
</blockquote>
<p>'bytes' können auch weniger als 8 bits haben.<br />
dieses 8-bittige dingens schimpft sich 'octet'<br />
--&gt; <a href="http://en.wikipedia.org/wiki/Octet_%28computing%29" rel="nofollow">http://en.wikipedia.org/wiki/Octet_(computing)</a></p>
</blockquote>
<p>Byte, so der Begriff für C++ auszulegen ist, ist auf eine Mindestgröße von 8 Bit definiert, also quasi ein Octet.</p>
<p>Siehe hierzu: <a href="http://www.parashift.com/c++-faq-lite/intrinsic-types.html#faq-26.6" rel="nofollow">http://www.parashift.com/c++-faq-lite/intrinsic-types.html#faq-26.6</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210442</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 15 Jan 2007 19:37:01 GMT</pubDate></item></channel></rss>