<?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[aus 4 chars einen Integer errechnen]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich schreibe einen Hexeditor und möchte nun verschiedene Daten z.b. über einen ELF-Anwendungsheader ausgeben.</p>
<p>Die Daten liegen mir in einem char-arry vor.<br />
Doch irgendwie schaffe ich es nicht, den Integer-wert aus 4 char-Werten zu errechnen.</p>
<pre><code class="language-cpp">fv = data[27];
	fv &lt;&lt; 1;
	fv += data[26];
	fv &lt;&lt; 1;
	fv += data[25];
	fv &lt;&lt; 1;
	fv += data[24];
	printw(&quot;[0x0000020] program entry point: %X\n&quot;, fv);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/168438/aus-4-chars-einen-integer-errechnen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 09:41:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168438.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Dec 2006 09:43:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 09:43:03 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich schreibe einen Hexeditor und möchte nun verschiedene Daten z.b. über einen ELF-Anwendungsheader ausgeben.</p>
<p>Die Daten liegen mir in einem char-arry vor.<br />
Doch irgendwie schaffe ich es nicht, den Integer-wert aus 4 char-Werten zu errechnen.</p>
<pre><code class="language-cpp">fv = data[27];
	fv &lt;&lt; 1;
	fv += data[26];
	fv &lt;&lt; 1;
	fv += data[25];
	fv &lt;&lt; 1;
	fv += data[24];
	printw(&quot;[0x0000020] program entry point: %X\n&quot;, fv);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1196494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196494</guid><dc:creator><![CDATA[GCoder|unlogged]]></dc:creator><pubDate>Fri, 22 Dec 2006 09:43:03 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 09:47:59 GMT]]></title><description><![CDATA[<p>hi,</p>
<pre><code class="language-cpp">fv &lt;&lt; 1;
</code></pre>
<p>sollte das nicht 8 statt 1 sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196498</guid><dc:creator><![CDATA[fkjasüoti aüpfkaüws04 g]]></dc:creator><pubDate>Fri, 22 Dec 2006 09:47:59 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 09:48:22 GMT]]></title><description><![CDATA[<p>Erstens hat die Anweisung <code>fv&lt;&lt;1;</code> keinen Nebeneffekt (d.h. sie berechnet nur einen Wert, verwirft ihn aber sofort wieder). Und zweitens schiebt sie fv um jeweils 1 Bit nach links (für deine Codierung brauchst du vermutlich 1 Byte=8 Bit).</p>
<p>Also die Lösung: Ersetze diese Anweisungen jeweils durch <code>fv&lt;&lt;=8;</code> (wenn du portabel bleiben willst: <code>fv&lt;&lt;=CHAR_BITS;</code> ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196499</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 22 Dec 2006 09:48:22 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 09:59:31 GMT]]></title><description><![CDATA[<p>Danke, CStoll, das war schonmal gut.</p>
<p>Doch der Programm-entry-point kann nicht stimmen.</p>
<pre><code class="language-cpp">//eben vergessen:
int fv = 0;
char *data;
//[...]

	fv = data[27];
	fv &lt;&lt;= 8;
	fv += data[26];
	fv &lt;&lt;= 8;
	fv += data[25];
	fv &lt;&lt;= 8;
	fv += data[24];
	printw(&quot;[0x0000018] program entry point: %X\n&quot;, fv);
</code></pre>
<p>Er sagt mir &quot;[0x0000018] program entry point: 8048BB4&quot;<br />
Im Hexeditor steht auch &quot;B4 8B 04 08&quot;</p>
<p>Nur ist meine Anwendung nur 7484h Bytes groß...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196505</guid><dc:creator><![CDATA[GCoder|unlogged]]></dc:creator><pubDate>Fri, 22 Dec 2006 09:59:31 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 10:07:25 GMT]]></title><description><![CDATA[<p>Dafür kann die Datenumwandlung nichts <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="😉"
    /> Woher bekommst du denn diese Daten?</p>
<p>(und wo und wie das Betriebssystem deine Anwendung im Speicher verteilt, hängt auch von mehr Faktoren ab als nur deren Größe)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196517</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 22 Dec 2006 10:07:25 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 10:20:07 GMT]]></title><description><![CDATA[<p>schau mal nach den Stichworten: Big Endian, Little Endian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196527</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 22 Dec 2006 10:20:07 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 10:47:25 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Dafür kann die Datenumwandlung nichts <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="😉"
    /> Woher bekommst du denn diese Daten?</p>
</blockquote>
<p>Dazu habe ich eine ppt-Präsentation gefunden.<br />
Ich weiß, an welcher Stelle die Adresse stehen müsste, nur ist sie falsch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=":'("
      alt="😢"
    /></p>
<p>Aber vlt. ist das auch nicht so wichtig.<br />
Alle anderen Header-Informationen kann ich ja auslesen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196548</guid><dc:creator><![CDATA[GCoder]]></dc:creator><pubDate>Fri, 22 Dec 2006 10:47:25 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 10:58:49 GMT]]></title><description><![CDATA[<p>GCoder schrieb:</p>
<blockquote>
<p>Dazu habe ich eine ppt-Präsentation gefunden.<br />
Ich weiß, an welcher Stelle die Adresse stehen müsste, nur ist sie falsch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=":'("
      alt="😢"
    /></p>
</blockquote>
<p>Und wie definierst du diese &quot;falsch&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196554</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 22 Dec 2006 10:58:49 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 11:06:35 GMT]]></title><description><![CDATA[<p>Naja, der Program entry piont beschreibt ja die Stelle, an der der Maschinencode in der Datei anfängt.</p>
<p>Wenn jetzt die Position des program entry pionts größer ist, als die Datei groß ist, muss ja irgendetwas schief gelaufen sein, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196560</guid><dc:creator><![CDATA[GCoder|unlogged]]></dc:creator><pubDate>Fri, 22 Dec 2006 11:06:35 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 11:18:54 GMT]]></title><description><![CDATA[<p>GCoder|unlogged schrieb:</p>
<blockquote>
<p>Naja, der Program entry piont beschreibt ja die Stelle, an der der Maschinencode in der Datei anfängt.</p>
<p>Wenn jetzt die Position des program entry pionts größer ist, als die Datei groß ist, muss ja irgendetwas schief gelaufen sein, oder?</p>
</blockquote>
<p>Keinesfalls. Zum Einen muss der in einer Datei enthaltene Code nicht unmittelbar ausführbar sein (und ist es oft auch nicht). Zum Anderen ist desen Lage in der Datei auch völlig unwichtig. Wann wird dann denn der Einsprungpunkt interessant? Erst dann wenn, das Betriebssystem das Programm tatsächlich startet, also <em>nach</em> dem Laden. Richtigerweise beschreibt die in der Datei angegebene Einsprungadresse die tatsächliche Adresse des Einsprungs nach dem Laden (wobei diese möglicherweise noch durch den Loader modifiziert wurde). Diese Adresse hat in der Regel hat nichts mit der Lage des Codes in der Datei zu tun. Die Datei selbst ist ja kein exaktes Abbild des Programms, so wie es später ausgeführt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196567</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 22 Dec 2006 11:18:54 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 11:50:19 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">fv += data[26]
</code></pre>
<p>rechnet vorzeichenbehaftet. Wenn data[26] also im höchstwertigen Bit eine 1 hat, ist er negativ. Besser wäre:</p>
<pre><code class="language-cpp">fv |= data[26]
</code></pre>
<p>bei den anderen natürlich auch.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196600</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 22 Dec 2006 11:50:19 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 11:50:39 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>[Keinesfalls. Zum Einen muss der in einer Datei enthaltene Code nicht unmittelbar ausführbar sein (und ist es oft auch nicht). Zum Anderen ist desen Lage in der Datei auch völlig unwichtig. Wann wird dann denn der Einsprungpunkt interessant? Erst dann wenn, das Betriebssystem das Programm tatsächlich startet, also <em>nach</em> dem Laden. Richtigerweise beschreibt die in der Datei angegebene Einsprungadresse die tatsächliche Adresse des Einsprungs nach dem Laden (wobei diese möglicherweise noch durch den Loader modifiziert wurde). Diese Adresse hat in der Regel hat nichts mit der Lage des Codes in der Datei zu tun. Die Datei selbst ist ja kein exaktes Abbild des Programms, so wie es später ausgeführt wird.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> Danke.</p>
<p>Denn ich muss feststellen, das Prinzip funktioniert bei .bmp und .wav - Dateien prima. (Bei wosit schnell das Format rausgesucht xD)</p>
<p>Also stimmt jetzt alles, THX@all</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196601</guid><dc:creator><![CDATA[GCoder|unlogged]]></dc:creator><pubDate>Fri, 22 Dec 2006 11:50:39 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 11:51:30 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<pre><code class="language-cpp">fv += data[26]
</code></pre>
<p>hat, ist er negativ. Besser wäre:</p>
<pre><code class="language-cpp">fv |= data[26]
</code></pre>
</blockquote>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196604</guid><dc:creator><![CDATA[GCoder|unlogged]]></dc:creator><pubDate>Fri, 22 Dec 2006 11:51:30 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 12:07:48 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>Wenn data[26] also im höchstwertigen Bit eine 1 hat, ist er negativ.</p>
</blockquote>
<p>Kann. Sich darauf zu verlassen kann auch unangenehme Konsequenzen haben. Im übrigen hilft das Wechseln zu | dann auch nicht. Denn das Problem liegt in der integralen Promotion, und die findet in jedem Falle statt. Tatsächlich ist also ein cast in unsigned char notwendig, um der Problematik sicher zu entgehen. Allerdings predige ich sowieso, im allgemeinen mit vorzeichenlosen Typen zu arbeiten, es sei denn, negative Werte als solche haben eine Bedeutung. ALso</p>
<pre><code class="language-cpp">fv |= static_cast&lt;unsigned char&gt;(data[26]);
</code></pre>
<p>besser aber</p>
<pre><code class="language-cpp">//eben vergessen:
unsigned char *data;
//[...]

unsigned fv = data[24]|(data[25]&lt;&lt;CHAR_BIT|(data[26]&lt;&lt;CHAR_BIT|(data[27]&lt;&lt;CHAR_BIT)));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1196608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196608</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 22 Dec 2006 12:07:48 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 12:04:44 GMT]]></title><description><![CDATA[<p>- egal -</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1196610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196610</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 22 Dec 2006 12:04:44 GMT</pubDate></item><item><title><![CDATA[Reply to aus 4 chars einen Integer errechnen on Fri, 22 Dec 2006 12:09:38 GMT]]></title><description><![CDATA[<p>was ist mit reinterpret_cast?</p>
<pre><code class="language-cpp">//eben vergessen:
unsigned char *data;
//[...]

unsigned int fv = reinterpret_cast&lt;unsigned int&gt;(data + 24);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1196614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1196614</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Fri, 22 Dec 2006 12:09:38 GMT</pubDate></item></channel></rss>