<?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[Checksumme - oder: Ich bin kurz vorm Verzweifeln]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>ich habe von der Schule eine Aufgabe gestellt bekommen,die ich lösen muss.<br />
Normalerweise bin ich nicht der Typ der viele Threads eröffnet,doch jetzt stecke ich fest und komme nicht mehr weiter(nach knapp 6 Stunden Probiererei verzage ich schon leicht).</p>
<p>Und zwar geht es um ein Programm das die Checksumme kontrollieren soll.<br />
Dazu hab ich mir folgende Gedanken gemacht:</p>
<p>Zuerst wird die Hex Datei eingelesen und zeilenweise ausgegeben,anschließend wird die Länge des Strings ermittelt.<br />
Dann erstellte ich eine for-Schleife die angefangen vom 2 Element aus dem String(der Erste ist ja der Doppelpunkt) bis zum Vorletzten zählt(Return wäre dann der Letzte).<br />
Dann soll er schauen welchen ASCII Code der Buchstabe oder die Zahl besitzt und diesen umwandeln.<br />
Zum Schluss wird dann der erste Wert mit 16<sup>1</sup> multipliziert und der zweite mit 16<sup>0</sup>.Die beiden werden dann zusammenaddiert.<br />
Soweit zu meiner Erklärung,aber schaut es euch bitte selber im Quellcode an.</p>
<p>Mittlerweile bin ich mir nicht mal mehr sicher ob meine Überlegungen zur Berechnung der Checksumme überhaupt stimmen.</p>
<pre><code class="language-cpp">//Checksumme
#include&lt;iostream&gt;
using namespace std;
int main()
{
	FILE *datei;
	datei=fopen(&quot;/home/bernhard/schule/C++/r.hex&quot;,&quot;r&quot;);  //Hex-Datei
	char string[800],string2[800];
	int speicher,speicher2,laenge,zahl;
	while(fgets(string,80,datei)!=0)
	{
		puts(string);                                   //zeilenweise ausgeben
	}
laenge=strlen(string);	
for(int x=1;laenge-=1;x+=2)   
	{
		speicher=(int)string[x];
		speicher2=(int)string[x+1];

		if((speicher&gt;48) &amp;&amp; (speicher &lt;65))
		{
			speicher-=48;
		}
		else
		{
			speicher-=65;
		}
		if((speicher2&gt;48) &amp;&amp;(speicher2&lt;65))
		{
			speicher2-=48;
		}
		else
		{
			speicher2-=65;
		}

zahl=(speicher*16)+(speicher2);
		fclose(datei);
datei=fopen(&quot;home/bernhard/schule/C++/abc.txt&quot;,&quot;a&quot;);  
//Zieldatei
		fprintf(datei,&quot;%d&quot;,zahl);
fclose(datei);	
}

}
</code></pre>
<p>mfg und besten Dank Schluchti</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/159752/checksumme-oder-ich-bin-kurz-vorm-verzweifeln</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 04:39:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/159752.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 18 Sep 2006 15:10:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Checksumme - oder: Ich bin kurz vorm Verzweifeln on Mon, 18 Sep 2006 16:17:18 GMT]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>ich habe von der Schule eine Aufgabe gestellt bekommen,die ich lösen muss.<br />
Normalerweise bin ich nicht der Typ der viele Threads eröffnet,doch jetzt stecke ich fest und komme nicht mehr weiter(nach knapp 6 Stunden Probiererei verzage ich schon leicht).</p>
<p>Und zwar geht es um ein Programm das die Checksumme kontrollieren soll.<br />
Dazu hab ich mir folgende Gedanken gemacht:</p>
<p>Zuerst wird die Hex Datei eingelesen und zeilenweise ausgegeben,anschließend wird die Länge des Strings ermittelt.<br />
Dann erstellte ich eine for-Schleife die angefangen vom 2 Element aus dem String(der Erste ist ja der Doppelpunkt) bis zum Vorletzten zählt(Return wäre dann der Letzte).<br />
Dann soll er schauen welchen ASCII Code der Buchstabe oder die Zahl besitzt und diesen umwandeln.<br />
Zum Schluss wird dann der erste Wert mit 16<sup>1</sup> multipliziert und der zweite mit 16<sup>0</sup>.Die beiden werden dann zusammenaddiert.<br />
Soweit zu meiner Erklärung,aber schaut es euch bitte selber im Quellcode an.</p>
<p>Mittlerweile bin ich mir nicht mal mehr sicher ob meine Überlegungen zur Berechnung der Checksumme überhaupt stimmen.</p>
<pre><code class="language-cpp">//Checksumme
#include&lt;iostream&gt;
using namespace std;
int main()
{
	FILE *datei;
	datei=fopen(&quot;/home/bernhard/schule/C++/r.hex&quot;,&quot;r&quot;);  //Hex-Datei
	char string[800],string2[800];
	int speicher,speicher2,laenge,zahl;
	while(fgets(string,80,datei)!=0)
	{
		puts(string);                                   //zeilenweise ausgeben
	}
laenge=strlen(string);	
for(int x=1;laenge-=1;x+=2)   
	{
		speicher=(int)string[x];
		speicher2=(int)string[x+1];

		if((speicher&gt;48) &amp;&amp; (speicher &lt;65))
		{
			speicher-=48;
		}
		else
		{
			speicher-=65;
		}
		if((speicher2&gt;48) &amp;&amp;(speicher2&lt;65))
		{
			speicher2-=48;
		}
		else
		{
			speicher2-=65;
		}

zahl=(speicher*16)+(speicher2);
		fclose(datei);
datei=fopen(&quot;home/bernhard/schule/C++/abc.txt&quot;,&quot;a&quot;);  
//Zieldatei
		fprintf(datei,&quot;%d&quot;,zahl);
fclose(datei);	
}

}
</code></pre>
<p>mfg und besten Dank Schluchti</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139724</guid><dc:creator><![CDATA[Schluchti]]></dc:creator><pubDate>Mon, 18 Sep 2006 16:17:18 GMT</pubDate></item><item><title><![CDATA[Reply to Checksumme - oder: Ich bin kurz vorm Verzweifeln on Mon, 18 Sep 2006 15:25:05 GMT]]></title><description><![CDATA[<p>Da ich gleich weg muss hier erstmal nur ein paar Anmerkungen:</p>
<p>1. Du bist im falschen Forum<br />
2. Bis auf die ersten drei Zeilen ist das ein C-Programm, kein C++<br />
3. Du benutzt laenge als Bedingung, eine Variable die nie einen Wert erhalten hat<br />
4. Du liest die ganze Datei ein und verarbeitest nur die letzte Zeile (und das nur wenn sie ein Zeilenende-Zeichen hatte)<br />
5. Du öffnest dieselbe Datei bei jedem for-Schleifendurchlauf neu (und schliesst sie nirgendwo)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139737</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 18 Sep 2006 15:25:05 GMT</pubDate></item><item><title><![CDATA[Reply to Checksumme - oder: Ich bin kurz vorm Verzweifeln on Mon, 18 Sep 2006 18:12:09 GMT]]></title><description><![CDATA[<p>Hi LordJaxom,</p>
<p>zu 1: Uups,könnte den bitte jemand verschieben? Danke!</p>
<p>bezüglich 3: Das ist wohl bei den vielen verschiedenen Versuchen untergegangen,ich hab es nun ergänzt.</p>
<p>zu 4: Könntest du das bitte näher erläutern,ich weiß nicht genau was du meinst.</p>
<p>zu 5: Ich habe nun Änderungen vorgenommen damit die einzelnen Dateien wieder geschlossen werden.</p>
<p>Die Änderungen sind im Quellcode oben editiert.</p>
<p>edit: Die Fehlermeldung beim Ausführen des Programmes lautet: &quot;Segmentation fault&quot;.</p>
<p>-------------------------------------------------------------------------<br />
Ich habe zu Testzwecken die Ausgabe des Programmes geändert und nun kommt beim Ausführen(beim Compilieren kommt komischerweise nichts..) dieser Fehler:</p>
<blockquote>
<p>*** glibc detected *** double free or corruption (top): 0x0804a008 ***<br />
2Aborted</p>
</blockquote>
<pre><code class="language-cpp">//Checksumme
#include&lt;iostream&gt;
using namespace std;
int main()
{
	FILE *datei;
	datei=fopen(&quot;/home/bernhard/schule/C++/r.hex&quot;,&quot;r&quot;);  //Hex-Datei
	char string[800],string2[800];
	int speicher,speicher2,laenge,zahl;
	while(fgets(string,80,datei)!=0)
	{
		puts(string);                                   //zeilenweise ausgeben
	}
	laenge=strlen(string);
	for(int x=1;laenge-=1;x+=2)   
	{
		speicher=(int)string[x];
		speicher2=(int)string[x+1];

		if((speicher&gt;=48) &amp;&amp; (speicher &lt;65))
		{
			speicher-=48;
		}
		else
		{
			speicher-=65;
		}
		if((speicher2&gt;=48) &amp;&amp;(speicher2&lt;65))
		{
			speicher2-=48;
		}
		else
		{
			speicher2-=65;
		}
		fclose(datei);
		zahl=(speicher*16)+(speicher2);
		cout&lt;&lt;zahl;
       }
}
</code></pre>
<p>mfg Schluchti</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139778</guid><dc:creator><![CDATA[Schluchti]]></dc:creator><pubDate>Mon, 18 Sep 2006 18:12:09 GMT</pubDate></item><item><title><![CDATA[Reply to Checksumme - oder: Ich bin kurz vorm Verzweifeln on Mon, 18 Sep 2006 19:02:25 GMT]]></title><description><![CDATA[<blockquote>
<p>zu 1: Uups,könnte den bitte jemand verschieben? Danke!</p>
</blockquote>
<p>Klar <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="😉"
    /><br />
Ich schieb dich mal nach c++, in der hoffung das du vor hast was aus dem iostream auch noch irgendwo zu verwenden *g* <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139948</guid><dc:creator><![CDATA[CMatt]]></dc:creator><pubDate>Mon, 18 Sep 2006 19:02:25 GMT</pubDate></item><item><title><![CDATA[Reply to Checksumme - oder: Ich bin kurz vorm Verzweifeln on Mon, 18 Sep 2006 19:02:42 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=759" rel="nofollow">CMatt</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=28" rel="nofollow">C# und .NET</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139949</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Mon, 18 Sep 2006 19:02:42 GMT</pubDate></item><item><title><![CDATA[Reply to Checksumme - oder: Ich bin kurz vorm Verzweifeln on Mon, 18 Sep 2006 20:12:01 GMT]]></title><description><![CDATA[<p>Da sind so vieeele Fehler drinn (<em>laenge-=1</em>), schreib das erstmal ins reine (C++ ;)).</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1140011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1140011</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 18 Sep 2006 20:12:01 GMT</pubDate></item><item><title><![CDATA[Reply to Checksumme - oder: Ich bin kurz vorm Verzweifeln on Tue, 19 Sep 2006 17:06:37 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Da sind so vieeele Fehler drinn (<em>laenge-=1</em>), schreib das erstmal ins reine (C++ ;)).</p>
<p>grüße</p>
</blockquote>
<p>Hi David,</p>
<p>ich muss zu meiner Schande gestehen,dass ich weder C++ noch C richtig kann(wird man ohnehin in meinen Posts merken).In der Schule werden uns sowohl C Fragmente als auch C++ Befehle beigebracht. Gewisse Sachen kann ich nur in C,andere wiederrum nur in C++ lösen....</p>
<p>In der Freizeit versuche ich mithilfe eines Buches reines C++ zu lernen,doch der Schweinehund(in diesem Fall: C ) schlägt doch noch durch.</p>
<p>Falls sich doch jemand in dem Sprachgewirr auskennt und helfen kann,dann bitte ich ihn mir zu helfen.</p>
<p>Hier der Quellcode(habe heute nochmals einige Sachen geändert),eigentlich <strong>muss</strong> es fehlerfrei laufen,doch das macht es nicht.</p>
<p>Als Fehlermeldung kommt bei der Ausführung: &quot;Speicherzugriffsfehler&quot;</p>
<pre><code class="language-cpp">//Checksumme
#include&lt;iostream&gt;
using namespace std;
int main()
{
	FILE *datei;
	datei=fopen(&quot;/home/bernhard/schule/C++/r.hex&quot;,&quot;r&quot;);  //Hex-Datei
	char string[800],string2[800];
	int speicher,speicher2,laenge;
	int checksum =0;
	while(fgets(string,80,datei)!=0)
	{
		puts(string);                                   //zeilenweise ausgeben
	}
	laenge=strlen(string);
	laenge-=1;

	for(int x=1;x&lt;laenge;x+=2)   
	{
		speicher=(int)string[x];
		speicher2=(int)string[x+1];

		if((speicher&gt;=48) &amp;&amp; (speicher &lt;55))
		{
			speicher-=48;
		}
		else
		{
			speicher-=55;
		}
		if((speicher2&gt;=48) &amp;&amp;(speicher2&lt;55))
		{
			speicher2-=48;
		}
		else
		{
			speicher2-=55;
		}
		checksum+=(speicher*16)+(speicher2);

	}
	cout&lt;&lt;checksum;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1140573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1140573</guid><dc:creator><![CDATA[Schluchti]]></dc:creator><pubDate>Tue, 19 Sep 2006 17:06:37 GMT</pubDate></item><item><title><![CDATA[Reply to Checksumme - oder: Ich bin kurz vorm Verzweifeln on Tue, 19 Sep 2006 17:04:25 GMT]]></title><description><![CDATA[<pre><code>for(int x=1;laenge;x+=2)
</code></pre>
<p>terminiert nicht da laenge=strlen(string)-1 ist.</p>
<p>was du willst ist:</p>
<pre><code>for(int x=1;x&lt;laenge;x+=2)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1140578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1140578</guid><dc:creator><![CDATA[hellihjb]]></dc:creator><pubDate>Tue, 19 Sep 2006 17:04:25 GMT</pubDate></item><item><title><![CDATA[Reply to Checksumme - oder: Ich bin kurz vorm Verzweifeln on Tue, 19 Sep 2006 17:31:17 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>schon langsam geniere ich mich wirklich was ich teilweise für Flüchtigkeitsfehler mache.</p>
<p>Als ich das Programm das erste mal ausgeführt habe ging es,und es zeigte den richtigen Wert an,anschließend hab ich den Hex-Code in der Quelldatei umgeändert,und jetzt kommt keine Ausgabe mehr.Auch nicht mit dem ersten Wert...</p>
<p>Die Quelldatei besitzt Root-Recht,das heißt ich kann sie nur mit Root Rechten bearbeiten. Das kann ja keine Auswirkungen auf die Funktionaliät des Programmes haben,da sie ja nur gelesen wird - oder?</p>
<p>mfg Schluchti</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1140587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1140587</guid><dc:creator><![CDATA[Schluchti]]></dc:creator><pubDate>Tue, 19 Sep 2006 17:31:17 GMT</pubDate></item><item><title><![CDATA[Reply to Checksumme - oder: Ich bin kurz vorm Verzweifeln on Tue, 19 Sep 2006 19:44:55 GMT]]></title><description><![CDATA[<p>Mich würd zum testen mal der Inhalt von r.hex interessieren. Evtl mal wo hochladen.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1140683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1140683</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Tue, 19 Sep 2006 19:44:55 GMT</pubDate></item><item><title><![CDATA[Reply to Checksumme - oder: Ich bin kurz vorm Verzweifeln on Wed, 20 Sep 2006 15:50:56 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Mich würd zum testen mal der Inhalt von r.hex interessieren. Evtl mal wo hochladen.</p>
<p>grüße</p>
</blockquote>
<p>Hi David,</p>
<p>der Inhalt der Datei beschränkt sich derzeit auf eine Zeile(später werden es dann mal mehr,aber zum Testen wird es sonst zu unübersichtlich.</p>
<p>Folgendes steht in r.hex</p>
<blockquote>
<p>:0200000080324C</p>
</blockquote>
<p>mfg Schluchti</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141312</guid><dc:creator><![CDATA[Schluchti]]></dc:creator><pubDate>Wed, 20 Sep 2006 15:50:56 GMT</pubDate></item><item><title><![CDATA[Reply to Checksumme - oder: Ich bin kurz vorm Verzweifeln on Wed, 20 Sep 2006 16:34:10 GMT]]></title><description><![CDATA[<p>Schluchti schrieb:</p>
<blockquote>
<p>...<br />
zu 4: Könntest du das bitte näher erläutern,ich weiß nicht genau was du meinst....</p>
</blockquote>
<p>Bin zwar nicht der Lord, aber ich denke, er meint folgende Stelle:<br />
...</p>
<pre><code class="language-cpp">...
	char string[800],string2[800];
	while(fgets(string,80,datei)!=0) // bei jedem fgets wird string neu überschrieben
	{
...
	}
	laenge=strlen(string); 
    // ab hier arbeitest Du mit string ... 
    // und da ist NUR das drin, was Du beim LETZTEN fgets() 
    // reingeschrieben hast - evtl. sogar gar nichts, 
    // je nachdem, was fgets() mit string macht, wenn es nichts mehr 
    // zu lesen hatte (und deswegen 0 zurückgibt
...
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141338</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 20 Sep 2006 16:34:10 GMT</pubDate></item><item><title><![CDATA[Reply to Checksumme - oder: Ich bin kurz vorm Verzweifeln on Fri, 22 Sep 2006 16:38:00 GMT]]></title><description><![CDATA[<p>Hi Simon2,</p>
<p>das war es wirklich.</p>
<p>Nun funktioniert das Programm einwandfrei.</p>
<p>Vielen Dank an alle Helfenden!</p>
<p>mfg Schluchti</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142699</guid><dc:creator><![CDATA[Schluchti]]></dc:creator><pubDate>Fri, 22 Sep 2006 16:38:00 GMT</pubDate></item></channel></rss>