<?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[Binäre Datei (Spielstand) auslesen und Werte anzeigen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe bisher in MFC nur mit Textdateien gearbeitet, was ziemlich liecht und verständlich war. Nun versuche eine Art Spielstand-Editor zu schreiben und habe da das Problem daß ich nicht weiß wie ich die Werte am einfachsten aus der Datei bekomme.</p>
<p>Beispiel:</p>
<p>Ich weiß daß an Offset X z.b. mein Geldbetrag steht (4 bytes). Dieser Geldbetrag wurde nun &quot;rückwwärts&quot; in die Datei geschrieben also z.B. 1 Million Geld = 000F4240h wird als 40420F00 in die Datei geschrieben. Ein anderer Wert benötigt jedoch nur 2 bytes , z.b. 1000 = 03E8h wird als E803 in die Datei geschrieben.</p>
<p>Meine Frage ist nun wie ich sowas am einfachsten mache. Ich denke es gibt da sicher eine Möglichkeit diese Werte wieder &quot;Rückwärts&quot; auszulesen und gleich in einen int/int64 zu wandlen ?!</p>
<p>Vielen Dank im vorraus<br />
Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/71031/binäre-datei-spielstand-auslesen-und-werte-anzeigen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 02:42:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/71031.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Apr 2004 10:08:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Binäre Datei (Spielstand) auslesen und Werte anzeigen on Wed, 14 Apr 2004 10:08:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe bisher in MFC nur mit Textdateien gearbeitet, was ziemlich liecht und verständlich war. Nun versuche eine Art Spielstand-Editor zu schreiben und habe da das Problem daß ich nicht weiß wie ich die Werte am einfachsten aus der Datei bekomme.</p>
<p>Beispiel:</p>
<p>Ich weiß daß an Offset X z.b. mein Geldbetrag steht (4 bytes). Dieser Geldbetrag wurde nun &quot;rückwwärts&quot; in die Datei geschrieben also z.B. 1 Million Geld = 000F4240h wird als 40420F00 in die Datei geschrieben. Ein anderer Wert benötigt jedoch nur 2 bytes , z.b. 1000 = 03E8h wird als E803 in die Datei geschrieben.</p>
<p>Meine Frage ist nun wie ich sowas am einfachsten mache. Ich denke es gibt da sicher eine Möglichkeit diese Werte wieder &quot;Rückwärts&quot; auszulesen und gleich in einen int/int64 zu wandlen ?!</p>
<p>Vielen Dank im vorraus<br />
Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/501172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/501172</guid><dc:creator><![CDATA[rayden5_]]></dc:creator><pubDate>Wed, 14 Apr 2004 10:08:13 GMT</pubDate></item><item><title><![CDATA[Reply to Binäre Datei (Spielstand) auslesen und Werte anzeigen on Wed, 14 Apr 2004 10:26:38 GMT]]></title><description><![CDATA[<p>Bau dir doch einfach ein stück code.. so in der richtung:</p>
<pre><code class="language-cpp">template&lt;class datatype&gt;
datatype read_in(unsigned char *pBuffer)
{
   datatype result;
   unsigned char *pVal = (unsigned char*)&amp;result+sizeof(datatype);
   for(int i=0;i&lt;sizeof(datatype);i++)
      *--pVal = *(pBuffer+i);
   return result;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/501192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/501192</guid><dc:creator><![CDATA[CMatt]]></dc:creator><pubDate>Wed, 14 Apr 2004 10:26:38 GMT</pubDate></item><item><title><![CDATA[Reply to Binäre Datei (Spielstand) auslesen und Werte anzeigen on Wed, 14 Apr 2004 10:37:36 GMT]]></title><description><![CDATA[<p>Hi Cmatt,</p>
<p>vielen Dank für die schnelle Antwort, leider habe ich wohl nicht sooo die Kenntnisse um zu verstehen wie das genau geht.</p>
<p>Dem read_in übergebe ich dann meinen Pointer auf den 4byte großen Puffer in dem meine hexzahl noch als char drinsteht ?!</p>
<p>Falls ja WO muß ich den dieses template definieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Much thx<br />
heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/501202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/501202</guid><dc:creator><![CDATA[rayden5_]]></dc:creator><pubDate>Wed, 14 Apr 2004 10:37:36 GMT</pubDate></item><item><title><![CDATA[Reply to Binäre Datei (Spielstand) auslesen und Werte anzeigen on Wed, 14 Apr 2004 10:56:27 GMT]]></title><description><![CDATA[<p>Das template liest aus nem übergeben buffer, swapt die bytes und stopf sie in deinen datenyp.</p>
<p>Bsp:</p>
<pre><code class="language-cpp">unsigned char *pBuffer = new ...
//.. fülle denn buffer / lese aus dem file

// ein long (4 bytes) liegft auf offset 0x10
// verwende das template um es aus dem buffer zu lesen:
long myLong = read_in&lt;long&gt;(pBuffer+0x10);

// ein short (2 bytes) liegft auf offset 0x20)
// verwende das template um es aus dem buffer zu lesen:
short myShort = read_in&lt;short&gt;(pBuffer+0x20);
</code></pre>
<p><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/501215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/501215</guid><dc:creator><![CDATA[CMatt]]></dc:creator><pubDate>Wed, 14 Apr 2004 10:56:27 GMT</pubDate></item><item><title><![CDATA[Reply to Binäre Datei (Spielstand) auslesen und Werte anzeigen on Wed, 14 Apr 2004 12:11:01 GMT]]></title><description><![CDATA[<p>Hi Cmatt,<br />
habe das jetzt mal implementiert, jedoch dreht er die Zahlen nicht um:</p>
<p>Habe ei short in der Datei stehen 5C 50 , das sollte er dan umdrehen zu 50 5C und in int wandeln, heraus kommt leider 23632 statt 20572, also nicht umgedreht.</p>
<p>Ist das mein Fehler , rufe ich da was flasch auf ?</p>
<p>Thx<br />
Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/501297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/501297</guid><dc:creator><![CDATA[rayden5_]]></dc:creator><pubDate>Wed, 14 Apr 2004 12:11:01 GMT</pubDate></item><item><title><![CDATA[Reply to Binäre Datei (Spielstand) auslesen und Werte anzeigen on Wed, 14 Apr 2004 12:37:24 GMT]]></title><description><![CDATA[<p>ermmm...</p>
<p>1. 0x5C 0x50 in ein int umwandel ist keine gute idee, da ein int bei dir höchst warscheinlich 4 byte sind, nimm lieber ein short oder __int16 <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>2. Wenn in deinem memory-dump ... 0x5C 0x50 ... steht und das ganze 0x505c sein soll brauchst doch gar nix umzuwandlen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Intel, AMD &amp; co. == Little Endian CPUs, die speichern die zahlen verkehrt rum, mein template bräuchtest du also nur auf nem MAC (Big Endian CPUs), auf nem PC ist so was genug:</p>
<pre><code class="language-cpp">// im buffer steht 0x5C, 0x50 
unsigned char buffer[] = {0x5C, 0x50 };

// steck das ganze in ein short
short *s = (short*)test;
// in *s steht nun 0x505C
</code></pre>
<p>und damit wir das ganze Platform unabhängig haben, erweitern wir das template:</p>
<pre><code class="language-cpp">template&lt;class datatype&gt;
datatype read_in(unsigned char *pBuffer)
{
#ifdef _PC
   datatype *result = (datatype*)pBuffer;
   return *result;
#else
#ifdef _MAC
   datatype result;
   unsigned char *pVal = (unsigned char*)&amp;result+sizeof(datatype);
   for(int i=0;i&lt;sizeof(datatype);i++)
      *--pVal = *(pBuffer+i);
   return result;
#else
#error &quot;No CPU-Type defined! (define _PC or _MAC)&quot;
#endif // _MAC
#endif // _PC
}
</code></pre>
<p>jetzt musst nur mehr _MAC oder _PC definieren und kannst immer über dieses template lesen, egal auf welchen syste, du grad bist <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/501314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/501314</guid><dc:creator><![CDATA[CMatt]]></dc:creator><pubDate>Wed, 14 Apr 2004 12:37:24 GMT</pubDate></item></channel></rss>