<?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[WORD zu char für WinSocktransfer]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab folgendes vor, aber ein kleines Verständnisprob.<br />
WIN32-Winsock-Kommunikation:</p>
<p>Hab eine Var &quot;WORD iOrder&quot;, diese soll in 2 Bytes den Representanten für einen Befehl speichern.</p>
<p>Also schnell einen DefineNetworkOrders.h geschrieben, der dem Client und dem Server vorliegen:<br />
#define TUWASBESTIMMTES (1)<br />
#define TUWASANDERS (2) //ETC<br />
...</p>
<p>Um nun den Server dazu zu veranlassen, &quot;Etwas Bestimmtes&quot; zu tun, weise ich nun zu:<br />
iorder = TUWASBESTIMMTES; // also = 1;</p>
<p>Dieses Word soll nun in die ersten beiden Bytes/Chars eines Strings &quot;transmitBuf&quot; kopiert werden, der den Befehlsidentifikator und die Daten zum Befehl enthält. (Die restlichen Daten liegen im String ab transmitBuf[2])</p>
<p>und dann das Paket zum Server per UDP sendet:<br />
sendto(Socket, transmitBuf, iLenPacket,0,(struct sockaddr <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="😉"
    /> &amp;inetServAddr, servLen)</p>
<p>Frage 1:<br />
Muß ich die htons Sachen für die WORDvar zur Bitreihenfolge nur machen, wenn ich auf einen anderen Betriebssystemtyp will? (die Anwendung soll nur unter Win laufen).</p>
<p>Frage 2:<br />
Ein WORD sind ja 2 Bytes, oder gibt es da unter Win64 unterschiede (müßte doch eigentlich fast genormt sein, ergo WORD = 16Bit Vorzeichenlos...oder)?</p>
<p>Frage 3:<br />
Die Zahl 1 liegt doch in einem Word, da Vorzeichenlos, binär so abgelegt:<br />
(0000 0000) (0001 0000) oder irre ich mich da? (Klammern umgeben die einzelnen Bytes die einzelen Teile...Highbyte &amp; Lowbyte vertauscht, oder wird das hintere Byte mit dem vorderen vertauscht?)<br />
Nun kann ich doch die einzelnen Bytes (ob ich sie jetzt mit htons auf Unixstandart bringe oder nicht mal dahingestellt) den Chars von transmitBuf[0] und [1] zuweisen...<br />
...steh nur grade etwas auf dem Schlauch...<br />
Gibts da was wie: (Pseudocode)<br />
transmitBuf[0] = iOrder[highbyte];<br />
transmitBuf[1] = iOrder[lowbyte];<br />
Das brauch ich dann ja nur auf der Serverseite umgekeht zu machen und hab die Var dann ja wieder in einem WORD, das ich auf Serverseite auswerten kann?</p>
<p>UND ZU ALLERLETZT DIE MASTERFRAGE:<br />
HAB ICH IN DER GANZEN SACHE EINEN DENKFEHLER UND GEHT DAS GANZE EINFACHER UND MIT WENIGER PROZESSORTAKTEN?</p>
<p>Danke im Vorraus. Falls ich mich irgendwo undeutlich oder schlichtweg nur dämlich ausgedrückt hab, sagt bescheid...ich versuch mein Bestes mich zu bessern und gelobe Besserung</p>
<p>Cu Paddy</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/168799/word-zu-char-für-winsocktransfer</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 14:34:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168799.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 Dec 2006 01:32:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to WORD zu char für WinSocktransfer on Thu, 28 Dec 2006 01:32:57 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab folgendes vor, aber ein kleines Verständnisprob.<br />
WIN32-Winsock-Kommunikation:</p>
<p>Hab eine Var &quot;WORD iOrder&quot;, diese soll in 2 Bytes den Representanten für einen Befehl speichern.</p>
<p>Also schnell einen DefineNetworkOrders.h geschrieben, der dem Client und dem Server vorliegen:<br />
#define TUWASBESTIMMTES (1)<br />
#define TUWASANDERS (2) //ETC<br />
...</p>
<p>Um nun den Server dazu zu veranlassen, &quot;Etwas Bestimmtes&quot; zu tun, weise ich nun zu:<br />
iorder = TUWASBESTIMMTES; // also = 1;</p>
<p>Dieses Word soll nun in die ersten beiden Bytes/Chars eines Strings &quot;transmitBuf&quot; kopiert werden, der den Befehlsidentifikator und die Daten zum Befehl enthält. (Die restlichen Daten liegen im String ab transmitBuf[2])</p>
<p>und dann das Paket zum Server per UDP sendet:<br />
sendto(Socket, transmitBuf, iLenPacket,0,(struct sockaddr <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="😉"
    /> &amp;inetServAddr, servLen)</p>
<p>Frage 1:<br />
Muß ich die htons Sachen für die WORDvar zur Bitreihenfolge nur machen, wenn ich auf einen anderen Betriebssystemtyp will? (die Anwendung soll nur unter Win laufen).</p>
<p>Frage 2:<br />
Ein WORD sind ja 2 Bytes, oder gibt es da unter Win64 unterschiede (müßte doch eigentlich fast genormt sein, ergo WORD = 16Bit Vorzeichenlos...oder)?</p>
<p>Frage 3:<br />
Die Zahl 1 liegt doch in einem Word, da Vorzeichenlos, binär so abgelegt:<br />
(0000 0000) (0001 0000) oder irre ich mich da? (Klammern umgeben die einzelnen Bytes die einzelen Teile...Highbyte &amp; Lowbyte vertauscht, oder wird das hintere Byte mit dem vorderen vertauscht?)<br />
Nun kann ich doch die einzelnen Bytes (ob ich sie jetzt mit htons auf Unixstandart bringe oder nicht mal dahingestellt) den Chars von transmitBuf[0] und [1] zuweisen...<br />
...steh nur grade etwas auf dem Schlauch...<br />
Gibts da was wie: (Pseudocode)<br />
transmitBuf[0] = iOrder[highbyte];<br />
transmitBuf[1] = iOrder[lowbyte];<br />
Das brauch ich dann ja nur auf der Serverseite umgekeht zu machen und hab die Var dann ja wieder in einem WORD, das ich auf Serverseite auswerten kann?</p>
<p>UND ZU ALLERLETZT DIE MASTERFRAGE:<br />
HAB ICH IN DER GANZEN SACHE EINEN DENKFEHLER UND GEHT DAS GANZE EINFACHER UND MIT WENIGER PROZESSORTAKTEN?</p>
<p>Danke im Vorraus. Falls ich mich irgendwo undeutlich oder schlichtweg nur dämlich ausgedrückt hab, sagt bescheid...ich versuch mein Bestes mich zu bessern und gelobe Besserung</p>
<p>Cu Paddy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198820</guid><dc:creator><![CDATA[TsPaddy]]></dc:creator><pubDate>Thu, 28 Dec 2006 01:32:57 GMT</pubDate></item><item><title><![CDATA[Reply to WORD zu char für WinSocktransfer on Thu, 28 Dec 2006 04:13:08 GMT]]></title><description><![CDATA[<p>Oder hilft da eher ne Zeigerberechnung:</p>
<p>PSEUDOCODE:</p>
<p>WORD Zahl;</p>
<p>BYTE byHiTeil, byLoTeil;<br />
char Meldung[40];</p>
<p>byHiTeil = Byte von Adresse von Zahl;<br />
byLoTeil = Byte von Adresse von Zahl + 1byte;</p>
<p>Meldung[0] = byHiTeil;<br />
Meldung[1] = byLoTeil;</p>
<p>???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1198838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198838</guid><dc:creator><![CDATA[TsPaddy]]></dc:creator><pubDate>Thu, 28 Dec 2006 04:13:08 GMT</pubDate></item><item><title><![CDATA[Reply to WORD zu char für WinSocktransfer on Thu, 28 Dec 2006 04:39:15 GMT]]></title><description><![CDATA[<p>Äh. Du kannst es einfach reinkopieren - reinterpret_cast funktioniert in dem Fall.<br />
Also:</p>
<pre><code class="language-cpp">char buffer[123];
    WORD w = 5;
    *reinterpret_cast&lt;WORD*&gt;(&amp;buffer[0]) = w; // oder halt = htons(w);
</code></pre>
<p>Oder aber mit shiften, womit du dir das &quot;htons&quot; auch noch sparst:</p>
<pre><code class="language-cpp">buffer[0] = (w &gt;&gt; 8) &amp; 0xFF;
    buffer[1] = w &amp; 0xFF;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1198843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1198843</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 28 Dec 2006 04:39:15 GMT</pubDate></item></channel></rss>