<?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[char array zu int konvertieren]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich habe vor ein Paar experimente mit tcp anzustellen :D.<br />
Dabei stoße ich auf das Problem, dass die Daten, die ich aus dem Socket lese, in einem char* buffer gespeichert sind. Wenn ich aber jetzt z.B. einen int übertragen will muss ich das ganze ja irgendwie konvertieren.<br />
Dazu habe ich folgende überlegung angespellt:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
    char * testc=new char[4];
    testc[0]=20;
    testc[1]=0;
    testc[2]=0;
    testc[3]=0;
    int* testi=reinterpret_cast&lt;int*&gt;(testc);
    std::cout &lt;&lt; *testi;
}
</code></pre>
<p>( die ausgabe ist 20 )</p>
<p>Das ganze funktioniert soweit auch, aber ich kann mir 1. nicht vorstellen, dass das ein guter Stil ist und 2. nicht erklären, warum ich testc[0] auf 20 setzen musste und nicht testc[3].<br />
Warum ist das so und wie macht man das richtig ? <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="🙂"
    /><br />
Freundliche Grüße,<br />
MrKnister</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305128/char-array-zu-int-konvertieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 25 Jun 2026 02:29:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305128.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Jun 2012 16:47:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to char array zu int konvertieren on Thu, 21 Jun 2012 16:47:03 GMT]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich habe vor ein Paar experimente mit tcp anzustellen :D.<br />
Dabei stoße ich auf das Problem, dass die Daten, die ich aus dem Socket lese, in einem char* buffer gespeichert sind. Wenn ich aber jetzt z.B. einen int übertragen will muss ich das ganze ja irgendwie konvertieren.<br />
Dazu habe ich folgende überlegung angespellt:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
    char * testc=new char[4];
    testc[0]=20;
    testc[1]=0;
    testc[2]=0;
    testc[3]=0;
    int* testi=reinterpret_cast&lt;int*&gt;(testc);
    std::cout &lt;&lt; *testi;
}
</code></pre>
<p>( die ausgabe ist 20 )</p>
<p>Das ganze funktioniert soweit auch, aber ich kann mir 1. nicht vorstellen, dass das ein guter Stil ist und 2. nicht erklären, warum ich testc[0] auf 20 setzen musste und nicht testc[3].<br />
Warum ist das so und wie macht man das richtig ? <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="🙂"
    /><br />
Freundliche Grüße,<br />
MrKnister</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225891</guid><dc:creator><![CDATA[MrKnister]]></dc:creator><pubDate>Thu, 21 Jun 2012 16:47:03 GMT</pubDate></item><item><title><![CDATA[Reply to char array zu int konvertieren on Thu, 21 Jun 2012 17:03:30 GMT]]></title><description><![CDATA[<p>Stichwort, warum du testc[0] auf 20 setzen musst und nicht testc[3]: <em>Endianess</em></p>
<p>Eine allgemeine, saubere Lösung für sämtliche Arten von Daten: <em>Serialization</em><br />
Musst du auch nicht (alles) selber machen:<br />
<a href="http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/index.html" rel="nofollow">http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/index.html</a></p>
<p>Wenn du es wirklich nur mit ints zu tun hast, dann kannst du natürlich auch eine weniger allgemeine Lösung wählen. Mit dem Endianess-Stichwort solltest du alles nötige gefunden haben, um dir selber etwas zu basteln. Viele Netzwerkbibliotheken (was auch immer du verwendest) sollten für Basisdatentypen bereits fertige Funktionen bieten, die diese in ein einheitliches Format übertragen und hinterher in das Format beim Empfänger zurück konvertieren (im Prinzip ist das Serialization für Arme, dafür aber evtl. komfortabler im Zusammenspiel mit der Netzwerkimplementierung).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225895</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 21 Jun 2012 17:03:30 GMT</pubDate></item><item><title><![CDATA[Reply to char array zu int konvertieren on Thu, 21 Jun 2012 17:03:05 GMT]]></title><description><![CDATA[<p>Google mal nach BigEndian und LittleEndian. Du wirst dann sehen, dass es gefährlich werden kann, int s herumzuschicken.<br />
Es ist sicherer, int-Werte lesbar in einen String zu verpacken, und den dann zu versenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225896</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Thu, 21 Jun 2012 17:03:05 GMT</pubDate></item><item><title><![CDATA[Reply to char array zu int konvertieren on Thu, 21 Jun 2012 17:16:32 GMT]]></title><description><![CDATA[<p>Danke für die schnellen Antworten.<br />
Zum Netzwerken benutze ich boost.asio. Die Bibliothek müsste ja sowas zur verfügung stellen.<br />
Ich guck mir das ganze noch mal genauer an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225903</guid><dc:creator><![CDATA[MrKnister]]></dc:creator><pubDate>Thu, 21 Jun 2012 17:16:32 GMT</pubDate></item></channel></rss>