<?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[Hex-String]]></title><description><![CDATA[<p>Ich habe einen String der so aussieht:</p>
<p>&quot;AF2AF6AAFDAFAAAF3AFAAAF2AF6AAFDAFAAAF3AFAAAF2AF6AAFDAFAAAF3AFAA&quot;</p>
<p>Ich möchte dass die 2 Zeichen in 1 Byte gespeichert werden.<br />
itoa wäre eine Lösung, nur ist sie nicht im Standard drin.</p>
<p>Gäbe es da eine standard-Methode, boost wäre auch willkommen!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292799/hex-string</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 17:15:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292799.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Sep 2011 12:04:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Hex-String on Sun, 18 Sep 2011 12:04:35 GMT]]></title><description><![CDATA[<p>Ich habe einen String der so aussieht:</p>
<p>&quot;AF2AF6AAFDAFAAAF3AFAAAF2AF6AAFDAFAAAF3AFAAAF2AF6AAFDAFAAAF3AFAA&quot;</p>
<p>Ich möchte dass die 2 Zeichen in 1 Byte gespeichert werden.<br />
itoa wäre eine Lösung, nur ist sie nicht im Standard drin.</p>
<p>Gäbe es da eine standard-Methode, boost wäre auch willkommen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120752</guid><dc:creator><![CDATA[courier]]></dc:creator><pubDate>Sun, 18 Sep 2011 12:04:35 GMT</pubDate></item><item><title><![CDATA[Reply to Hex-String on Sun, 18 Sep 2011 12:34:15 GMT]]></title><description><![CDATA[<p>Das ist in diesem speziellen Fall schwierig, weil der String eine ungerade Anzahl Zeichen enthält.</p>
<p>Ansonsten ist so was aber recht einfach zusammenzuschustern:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;stdexcept&gt;

unsigned char hex_value(char c) {
  if(c &gt;= '0' &amp;&amp; c &lt;= '9') return c - '0';
  if(c &gt;= 'A' &amp;&amp; c &lt;= 'Z') return c - 'A' + 10;
  if(c &gt;= 'a' &amp;&amp; c &lt;= 'z') return c - 'a' + 10;

  throw std::invalid_argument(&quot;Ungültiges Hex-Zeichen&quot;);
}

std::string parse_hexstring(std::string const &amp;input) {
  if(input.size() % 2 != 0) throw std::invalid_argument(&quot;Ungerade Anzahl Zeichen im Hex-String&quot;);

  std::string result;

  result.reserve(input.size() / 2);

  for(std::string::size_type i = 0; i &lt; input.size(); i += 2) {
    result.push_back(static_cast&lt;char&gt;(hex_value(input[i]) * 16 + hex_value(input[i + 1])));
  }

  return result;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2120762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120762</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 18 Sep 2011 12:34:15 GMT</pubDate></item><item><title><![CDATA[Reply to Hex-String on Sun, 18 Sep 2011 12:34:22 GMT]]></title><description><![CDATA[<p><a href="http://www.c-plusplus.net/forum/39488" rel="nofollow">http://www.c-plusplus.net/forum/39488</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120763</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 18 Sep 2011 12:34:22 GMT</pubDate></item><item><title><![CDATA[Reply to Hex-String on Sun, 18 Sep 2011 12:42:19 GMT]]></title><description><![CDATA[<p>Viel kompliziertes drumherum, dafür wird das eigentliche Lesen sehr elegant:</p>
<pre><code class="language-cpp">#include &lt;streambuf&gt; 
#include &lt;sstream&gt;
#include &lt;iostream&gt;

class seppjs_zerhacker_streambuf : public std::streambuf
{
public:
  seppjs_zerhacker_streambuf(std::istream&amp; in )
    : in(in) 
    , buf (in.rdbuf())
    , counter(0)
  {
    in.rdbuf(this); 
  }
  ~seppjs_zerhacker_streambuf()
  {
    in.rdbuf(buf); 
  }

protected:
  virtual int_type underflow() 
  {
    if (counter != 2)
      return buf-&gt;sgetc();
    else
      return traits_type::to_int_type(' ');
  }
  virtual int_type uflow()      
  {
    if (counter!=2)
      {
        ++counter;
        return buf-&gt;sbumpc();
      }
    else
      {
        counter = 0;
        return traits_type::to_int_type(' ');
      }
  }
private:
  seppjs_zerhacker_streambuf( const seppjs_zerhacker_streambuf&amp; );  
  seppjs_zerhacker_streambuf&amp; operator=( const  seppjs_zerhacker_streambuf&amp; ); 
  std::istream&amp; in;
  std::streambuf* buf;
  short counter;
};

int main()
{
  std::stringstream in(&quot;AF2AF6AAFDAFAAAF3AFAAAF2AF6AAFDAFAAAF3AFAAAF2AF6AAFDAFAAAF3AFAA&quot;);
  seppjs_zerhacker_streambuf foo(in);

  short byte;
  while (in &gt;&gt; std::hex &gt;&gt; byte)
    std::cout &lt;&lt; &quot;Gelesen: &quot; &lt;&lt; byte &lt;&lt; '\n';
}
</code></pre>
<p>Kann auch sehr leicht angepasst werden, so dass der Puffer nach einer wählbaren Anzahl Zeichen zerhackt, falls man mal mit Words statt Bytes arbeiten möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120768</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 18 Sep 2011 12:42:19 GMT</pubDate></item></channel></rss>