<?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[String -&amp;gt; Hey]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgendes Problem: Ich habe eine Zeichenkette, welche ganz viele hexadezimale Zahlen repräsentiert.<br />
char* str = &quot;42 AF 89 E4 ...&quot;;</p>
<p>und möchte die Hexadezimalcodes extrahieren und in char's konvertieren, dazu habe ich mir folgende Routine ausgedacht, welche leider nicht funktioniert und ich keine Idee habe, wo der logische Fehler liegt...</p>
<p>Übergeben wird der zweistellige Hexcode und soll mit Hilfe von ODER und SHIFT's konvertiert werden. Möglicherweise gibt es auch einen beseren Algorithmus, ich bin für konstruktive Vorschläge sehr dankbar.</p>
<pre><code class="language-cpp">inline unsigned char hex2char(char hex[2])
{
	unsigned char result = 0x00;

	switch(hex[1])
	{
	case 0: break;
	case 1: result |= 0x01; break;
	case 2: result |= 0x02; break;
	case 3: result |= 0x03; break;
	case 4: result |= 0x04; break;
	case 5: result |= 0x05; break;
	case 6: result |= 0x06; break;
	case 7: result |= 0x07; break;
	case 8: result |= 0x08; break;
	case 9: result |= 0x09; break;
	case 'A': result |= 0x0A; break;
	case 'B': result |= 0x0B; break;
	case 'C': result |= 0x0C; break;
	case 'D': result |= 0x0D; break;
	case 'E': result |= 0x0E; break;
	case 'F': result |= 0x0F; break;
	}

	switch(hex[0])
	{
	case 0: break;
	case 1: result |= (0x01 &lt;&lt; 4); break;
	case 2: result |= (0x02 &lt;&lt; 4); break;
	case 3: result |= (0x03 &lt;&lt; 4); break;
	case 4: result |= (0x04 &lt;&lt; 4); break;
	case 5: result |= (0x05 &lt;&lt; 4); break;
	case 6: result |= (0x06 &lt;&lt; 4); break;
	case 7: result |= (0x07 &lt;&lt; 4); break;
	case 8: result |= (0x08 &lt;&lt; 4); break;
	case 9: result |= (0x09 &lt;&lt; 4); break;
	case 'A': result |= (0x0A &lt;&lt; 4); break;
	case 'B': result |= (0x0B &lt;&lt; 4); break;
	case 'C': result |= (0x0C &lt;&lt; 4); break;
	case 'D': result |= (0x0D &lt;&lt; 4); break;
	case 'E': result |= (0x0E &lt;&lt; 4); break;
	case 'F': result |= (0x0F &lt;&lt; 4); break;
	}

	return(result);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/278595/string-gt-hey</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 05:14:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278595.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Dec 2010 15:02:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to String -&amp;gt; Hey on Thu, 09 Dec 2010 15:02:37 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgendes Problem: Ich habe eine Zeichenkette, welche ganz viele hexadezimale Zahlen repräsentiert.<br />
char* str = &quot;42 AF 89 E4 ...&quot;;</p>
<p>und möchte die Hexadezimalcodes extrahieren und in char's konvertieren, dazu habe ich mir folgende Routine ausgedacht, welche leider nicht funktioniert und ich keine Idee habe, wo der logische Fehler liegt...</p>
<p>Übergeben wird der zweistellige Hexcode und soll mit Hilfe von ODER und SHIFT's konvertiert werden. Möglicherweise gibt es auch einen beseren Algorithmus, ich bin für konstruktive Vorschläge sehr dankbar.</p>
<pre><code class="language-cpp">inline unsigned char hex2char(char hex[2])
{
	unsigned char result = 0x00;

	switch(hex[1])
	{
	case 0: break;
	case 1: result |= 0x01; break;
	case 2: result |= 0x02; break;
	case 3: result |= 0x03; break;
	case 4: result |= 0x04; break;
	case 5: result |= 0x05; break;
	case 6: result |= 0x06; break;
	case 7: result |= 0x07; break;
	case 8: result |= 0x08; break;
	case 9: result |= 0x09; break;
	case 'A': result |= 0x0A; break;
	case 'B': result |= 0x0B; break;
	case 'C': result |= 0x0C; break;
	case 'D': result |= 0x0D; break;
	case 'E': result |= 0x0E; break;
	case 'F': result |= 0x0F; break;
	}

	switch(hex[0])
	{
	case 0: break;
	case 1: result |= (0x01 &lt;&lt; 4); break;
	case 2: result |= (0x02 &lt;&lt; 4); break;
	case 3: result |= (0x03 &lt;&lt; 4); break;
	case 4: result |= (0x04 &lt;&lt; 4); break;
	case 5: result |= (0x05 &lt;&lt; 4); break;
	case 6: result |= (0x06 &lt;&lt; 4); break;
	case 7: result |= (0x07 &lt;&lt; 4); break;
	case 8: result |= (0x08 &lt;&lt; 4); break;
	case 9: result |= (0x09 &lt;&lt; 4); break;
	case 'A': result |= (0x0A &lt;&lt; 4); break;
	case 'B': result |= (0x0B &lt;&lt; 4); break;
	case 'C': result |= (0x0C &lt;&lt; 4); break;
	case 'D': result |= (0x0D &lt;&lt; 4); break;
	case 'E': result |= (0x0E &lt;&lt; 4); break;
	case 'F': result |= (0x0F &lt;&lt; 4); break;
	}

	return(result);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1991967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991967</guid><dc:creator><![CDATA[dergast124]]></dc:creator><pubDate>Thu, 09 Dec 2010 15:02:37 GMT</pubDate></item><item><title><![CDATA[Reply to String -&amp;gt; Hey on Thu, 09 Dec 2010 15:05:52 GMT]]></title><description><![CDATA[<p>Kann es sein, dass du bei den Zahlen die Apostrophe vergessen hast drumherum zu machen?</p>
<pre><code class="language-cpp">case '1': result |= 0x01; break;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1991970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991970</guid><dc:creator><![CDATA[heija]]></dc:creator><pubDate>Thu, 09 Dec 2010 15:05:52 GMT</pubDate></item><item><title><![CDATA[Reply to String -&amp;gt; Hey on Thu, 09 Dec 2010 15:11:30 GMT]]></title><description><![CDATA[<p>Ah, an solchen Kleinigkeiten hängts immer <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="😛"
    /><br />
Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1991974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991974</guid><dc:creator><![CDATA[gastder123]]></dc:creator><pubDate>Thu, 09 Dec 2010 15:11:30 GMT</pubDate></item><item><title><![CDATA[Reply to String -&amp;gt; Hey on Thu, 09 Dec 2010 15:17:36 GMT]]></title><description><![CDATA[<p>Geht übrigens noch einfacher:</p>
<pre><code class="language-cpp">if      (hex[0]&lt;='9' &amp;&amp; hex[0]&gt;='0') result  = (hex[0]-'0'   ) &lt;&lt; 4;
else if (hex[0]&gt;='A' &amp;&amp; hex[0]&lt;='F') result  = (hex[0]-'A'+10) &lt;&lt; 4;
if      (hex[1]&lt;='9' &amp;&amp; hex[1]&gt;='0') result |= (hex[1]-'0'   );
else if (hex[1]&gt;='A' &amp;&amp; hex[1]&lt;='F') result |= (hex[1]-'A'+10);
</code></pre>
<p>(ungetestet)</p>
<p>Kann rein theoretisch Probleme verursachen, wenn der Zeichensatz total kryptisch ist und die Zahlen und die Buchstaben nicht nebeneinander liegen (und ist bei keinem gebräuchlichen der Fall). Dafür ist es schneller und vor allem kürzer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1991978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991978</guid><dc:creator><![CDATA[heija]]></dc:creator><pubDate>Thu, 09 Dec 2010 15:17:36 GMT</pubDate></item><item><title><![CDATA[Reply to String -&amp;gt; Hey on Thu, 09 Dec 2010 17:23:02 GMT]]></title><description><![CDATA[<p>Das 'es geht noch einfacher' geht weiter:</p>
<pre><code class="language-cpp">using namespace std;
    char* str = &quot;42 AF 89 E4&quot;;
    istringstream buf( str ); // erfordert #include &lt;sstream&gt;
    buf &gt;&gt; hex;
    for( int zahl; buf &gt;&gt; zahl; )
        cout &lt;&lt; zahl &lt;&lt; &quot; &quot;;
</code></pre>
<p>(getestet)</p>
<p>Liefert</p>
<pre><code>66 175 137 228
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1992095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1992095</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 09 Dec 2010 17:23:02 GMT</pubDate></item><item><title><![CDATA[Reply to String -&amp;gt; Hey on Thu, 09 Dec 2010 17:26:51 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Das 'es geht noch einfacher' geht weiter</p>
</blockquote>
<p>Aber das 'es geht noch schneller' hört auf und kehrt zum 'es geht noch overflowiger, throwmeidender und viel, viel langsamer' um.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1992098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1992098</guid><dc:creator><![CDATA[heija]]></dc:creator><pubDate>Thu, 09 Dec 2010 17:26:51 GMT</pubDate></item><item><title><![CDATA[Reply to String -&amp;gt; Hey on Thu, 09 Dec 2010 22:36:56 GMT]]></title><description><![CDATA[<p>heija schrieb:</p>
<blockquote>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Das 'es geht noch einfacher' geht weiter</p>
</blockquote>
<p>Aber das 'es geht noch schneller' hört auf und kehrt zum 'es geht noch overflowiger, throwmeidender und viel, viel langsamer' um.</p>
</blockquote>
<p>Na und? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>Wenn es nur ein paar Zahlen sind, so spielt das doch keine Rolle. Und wenn es ein paar Millionen Zahlen zum Lesen sind, so stellt sich immer die Frage, wo die herkommen, und warum sie erst in den String kopiert werden müssen, statt dass man sie gleich einliest.</p>
<p>Schnelligkeit ist nicht das Maß aller Dinge. Daneben gibt es noch Einfachheit, Robustheit, Flexibilität und die fehlende Möglichkeit Fehler zu machen - mit anderen Worten: der Code kostet einfach weniger (Zeit &amp; Geld).</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1992303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1992303</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 09 Dec 2010 22:36:56 GMT</pubDate></item></channel></rss>