<?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[chars addieren]]></title><description><![CDATA[<p>Hallo.<br />
Ich möchte gerne Hex-Werte, die in einem Char Array stehen, addieren und das Ergebnis in einem CharErgebnis[1] speichern. Ich brauche nur das LSB des Ergebniss. Daher muss CharErgebnis nicht größer sein.<br />
Kann mir da jemand helfen?<br />
Danke.</p>
<p>PS: Sollte es diesen Beitrag schon geben, so wäre ich für ein Schlagwort in der Suche dankbar und entschuldige mich. Ich habe nach langer Suche aufgegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188508/chars-addieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 02:30:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188508.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Aug 2007 09:09:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to chars addieren on Wed, 01 Aug 2007 09:09:35 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Ich möchte gerne Hex-Werte, die in einem Char Array stehen, addieren und das Ergebnis in einem CharErgebnis[1] speichern. Ich brauche nur das LSB des Ergebniss. Daher muss CharErgebnis nicht größer sein.<br />
Kann mir da jemand helfen?<br />
Danke.</p>
<p>PS: Sollte es diesen Beitrag schon geben, so wäre ich für ein Schlagwort in der Suche dankbar und entschuldige mich. Ich habe nach langer Suche aufgegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336339</guid><dc:creator><![CDATA[Mackie1980]]></dc:creator><pubDate>Wed, 01 Aug 2007 09:09:35 GMT</pubDate></item><item><title><![CDATA[Reply to chars addieren on Wed, 01 Aug 2007 09:12:30 GMT]]></title><description><![CDATA[<p>char's sind ganz normale Ganzzahltypen (typischerweise 8 Bit groß), mit denen du natürlich auch rechnen kannst wie mit jedem anderen Zahlentyp.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336342</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 01 Aug 2007 09:12:30 GMT</pubDate></item><item><title><![CDATA[Reply to chars addieren on Wed, 01 Aug 2007 09:21:00 GMT]]></title><description><![CDATA[<p>hmm.. komisch..</p>
<p>also etwas konkreter:</p>
<pre><code class="language-cpp">char CommandInChecksum[10];
char Checksum[1];
.
.//CommandInChecksum bekommt Werte
.
Checksum[0] = CommandInChecksum[1] + CommandInChecksum[2];
</code></pre>
<p>... wird nicht compiliert:<br />
&quot;'=': Linker Operand muss ein L_Wert sein&quot;</p>
<p>Auch wenn ich die Größe von Checksum erweiter, hilft das nix.<br />
Ist bestimmt ein Grundgedankenfehler drin, richtig? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1336348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336348</guid><dc:creator><![CDATA[Mackie1980]]></dc:creator><pubDate>Wed, 01 Aug 2007 09:21:00 GMT</pubDate></item><item><title><![CDATA[Reply to chars addieren on Wed, 01 Aug 2007 09:26:01 GMT]]></title><description><![CDATA[<p>Ein Array für EIN Element? Ist das nicht ein wenig übertrieben? Hast du es mal mit einem einfachen 'char'-Wert versucht?</p>
<p>PS: Aber eigentlich sollte das Array-Element ein lvalue sein - es sei denn natürlich, du hast da unterwegs noch ein anderes 'Checksum' angelegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336351</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 01 Aug 2007 09:26:01 GMT</pubDate></item><item><title><![CDATA[Reply to chars addieren on Wed, 01 Aug 2007 09:34:07 GMT]]></title><description><![CDATA[<p>Oh mann...<br />
Hier wird man echt schnell geholfen <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 />
Sau gut. Hatte echt noch aus anderen Versuchen ein checksum deklariert.<br />
Es funzt.<br />
Und zugegeben char[1] macht natürlich wenig Sinn. Auch ein Rest aus Verzweiflungstaten <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 />
Vielen Dank erstmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336359</guid><dc:creator><![CDATA[Mackie1980]]></dc:creator><pubDate>Wed, 01 Aug 2007 09:34:07 GMT</pubDate></item><item><title><![CDATA[Reply to chars addieren on Wed, 01 Aug 2007 11:51:34 GMT]]></title><description><![CDATA[<p>Hoffe mal, das wird trotzdem noch gelesen.. wollte nicht gleich einen neue Thread öffnen.</p>
<p>Warum springt der Compiler nicht in die Funktion:</p>
<pre><code class="language-cpp">int Endcommand = 9;
int count;
unsigned char CommandComplete[11];
.
. // alle Variablen werden schon irgendwo deklariert ;)
.
void CCom::OnMakeCommand(unsigned char CommandIn[10])
{
	for (count = 10; ((count = 0) || (CommandIn[Endcommand] != 0xFF)); count--)
	{
		Endcommand--;
	}
	for (count = 0; count &lt;= Endcommand; count++)
	{
		CommandComplete[count] = CommandIn[count];
	}

	CommandComplete[Endcommand] = OnMakeChecksum(CommandIn); //von hier aus soll der Compiler eigentlich in die untere
//Funktion springen.
//Tut er aber nicht.... seltsamerweise hat checksum trotzdem plötzlich einen Wert,
//aber einen falschen Wert.
	ok = OnWriteCom(Endcommand + 1);
	Endcommand = 9;
}

unsigned char CCom::OnMakeChecksum(unsigned char CommandInChecksum[10])
{
	switch(Endcommand)
	{		
		case 9:
		{
			CommandInChecksum[4] = (CommandInChecksum[4]^(0xFF)) + 0x01;
			CommandInChecksum[5] = (CommandInChecksum[5]^(0xFF)) + 0x01;
			CommandInChecksum[6] = (CommandInChecksum[6]^(0xFF)) + 0x01;
			CommandInChecksum[7] = (CommandInChecksum[7]^(0xFF)) + 0x01;
			CommandInChecksum[8] = (CommandInChecksum[8]^(0xFF)) + 0x01;

			checksum = CommandInChecksum[4] + CommandInChecksum[5] 
                        + CommandInChecksum[6] + CommandInChecksum[7] + CommandInChecksum[8];
			break;
		}
/*		case 8:
			{
			}
		case 7:
			{
			}*/
	}
	return checksum;
}
</code></pre>
<p>Also compiliert wird der Kram.. und ja ich werde noch diese Checksummenbildung durch schleifen verkürzen / verschönern und so weiter....<br />
Aber wieso springt er nicht in die Funktion OnMakeChecksum?<br />
Wollte nicht noch mehr Code posten. Wenns aber zur Lösung beiträgt kann ich das natürlich noch nachholen.<br />
Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336456</guid><dc:creator><![CDATA[Mackie1980]]></dc:creator><pubDate>Wed, 01 Aug 2007 11:51:34 GMT</pubDate></item><item><title><![CDATA[Reply to chars addieren on Wed, 01 Aug 2007 11:53:46 GMT]]></title><description><![CDATA[<p>Hast du das ganze mal durch den Debugger geschickt und dabei nachgesehen, wohin er tatsächlich springt?</p>
<p>(btw, ich hoffe es stört dich nicht, daß bei dem Aufruf das übergebene Kommando (CommandIn) pulverisiert wird).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336460</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 01 Aug 2007 11:53:46 GMT</pubDate></item><item><title><![CDATA[Reply to chars addieren on Wed, 01 Aug 2007 12:10:43 GMT]]></title><description><![CDATA[<p>Also das komische ist, er springt in die Zeile:</p>
<pre><code class="language-cpp">CommandComplete[Endcommand] = OnMakeChecksum(CommandIn);
</code></pre>
<p>dann drücke ich F11 (für Einzelschritt) und er geht einfach eine Zeile weiter <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>Dass CommandIn pulverisiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> wird stört mich zwar nicht, da ich es vorher auf<br />
CommandComplete rette, aber ich wüsste schon gerne warum das so ist und wie ich<br />
das verhindern könnte.<br />
Vielen Dank schonmal.</p>
<p>Nachtrag:<br />
Während ich auf eine Antwort wartete, habe ich die Checksummen Funktion auf einen Zweizeiler verkürzt.<br />
Und jetzt plötzlich wie durch ein Wunder springt er in die Funktion und gibt auch die korrekte Checksumme... hmm.. muss ich das verstehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336468</guid><dc:creator><![CDATA[Mackie1980]]></dc:creator><pubDate>Wed, 01 Aug 2007 12:10:43 GMT</pubDate></item><item><title><![CDATA[Reply to chars addieren on Wed, 01 Aug 2007 12:21:39 GMT]]></title><description><![CDATA[<p>Mackie1980 schrieb:</p>
<blockquote>
<p>Dass CommandIn pulverisiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> wird stört mich zwar nicht, da ich es vorher auf<br />
CommandComplete rette, aber ich wüsste schon gerne warum das so ist und wie ich<br />
das verhindern könnte.<br />
Vielen Dank schonmal.</p>
</blockquote>
<p>Die ganzen Zuweisungen <code>CommandInChecksum[4] = (CommandInChecksum[4]^(0xFF)) + 0x01;</code> schreiben in dem übergebenen Array. Um das zu verhindern, mußt du diese Zuweisungen weglassen und stattdessen die Berechnungen in die große Addition integrieren.</p>
<blockquote>
<p>Nachtrag:<br />
Während ich auf eine Antwort wartete, habe ich die Checksummen Funktion auf einen Zweizeiler verkürzt.<br />
Und jetzt plötzlich wie durch ein Wunder springt er in die Funktion und gibt auch die korrekte Checksumme... hmm.. muss ich das verstehen?</p>
</blockquote>
<p>Hmm, seltsam. Vielleicht war ja deine Funktion nicht ganz korrekt.</p>
<p>*grübelt* was mir noch auffällt: ich glaube, in der ersten for-Schleife sollte es besser 'count==0' heißen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336492</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 01 Aug 2007 12:21:39 GMT</pubDate></item><item><title><![CDATA[Reply to chars addieren on Wed, 01 Aug 2007 12:32:44 GMT]]></title><description><![CDATA[<p>Ok...<br />
Dann hing wohl alles mit meiner umständlichen Ausdrucksweise zusammen.<br />
Habe es jetzt auf das hier verkürzt:</p>
<pre><code class="language-cpp">void CCom::OnMakeCommand(unsigned char CommandIn[10])
{
	for (count = 10; ((count == 0) || (CommandIn[Endcommand] != 0xFF)); count--)
	{
		Endcommand--;
	}
	for (count = 0; count &lt;= Endcommand; count++)
	{
		CommandComplete[count] = CommandIn[count];
	}

	CommandComplete[Endcommand] = OnMakeChecksum(CommandIn);
	ok = OnWriteCom(Endcommand + 1);
	Endcommand = 9;
}

unsigned char CCom::OnMakeChecksum(unsigned char CommandInChecksum[10])
{
	checksum = 0x00;
	for (count = 4; count &lt; Endcommand; count++)
	{
		CommandInChecksum[count] = (CommandInChecksum[count]^(0xFF)) + 0x01;
		checksum = checksum + CommandInChecksum[count];
	}
	return checksum;
}
</code></pre>
<p>Sieht ja gleich viel schicker aus und funzt besser <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 />
Hoffe mal, Du meintest das count==1 aus der Abbruchbedingung!?</p>
<p>So und jetzt meine letzt Frage (für heute <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 />
Um ein char array (diesmal auch größer 1 <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="😉"
    /> ) in ein anderes zu kopieren,<br />
muss ich da wirklich jedesmal ne Schleife bauen oder gibts da auch einen &quot;echten&quot;<br />
Befehl / Einzeiler für?</p>
<p>Im voraus herzlichen Dank. Hast mir echt den Tag gerettet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336502</guid><dc:creator><![CDATA[Mackie1980]]></dc:creator><pubDate>Wed, 01 Aug 2007 12:32:44 GMT</pubDate></item><item><title><![CDATA[Reply to chars addieren on Wed, 01 Aug 2007 12:48:43 GMT]]></title><description><![CDATA[<p>Einen Befehl gibt es nicht dafür, aber einige Funktionen: memcpy(), strcpy() (letzteres für nullterminierte Strings) aus der C Bibliothek oder std::copy() aus der C++ STL.</p>
<p>PS: Wie gesagt, würde ich die Eingabedaten nur pulverisieren, wenn es gar nicht anders geht - und in deinem Fall ist es unnötig:</p>
<pre><code class="language-cpp">//ungünstig:
for (count = 4; count &lt; Endcommand; count++)
{
  //überschreibt das eingegebene Array
  CommandInChecksum[count] = (CommandInChecksum[count]^(0xFF)) + 0x01;
  checksum = checksum + CommandInChecksum[count];
}

//bessere Lösung:
for(count=4;count&lt;EndCommand;++count)
  checksum += (CommandInChecksum[count]^0xFF) + 1;
</code></pre>
<p>PPS: Ja, ich meinte den Vergleich in der Abbruchbedingung <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/1336524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336524</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 01 Aug 2007 12:48:43 GMT</pubDate></item><item><title><![CDATA[Reply to chars addieren on Wed, 01 Aug 2007 12:50:44 GMT]]></title><description><![CDATA[<p>Krass...<br />
Tja, da merkt man doch das fehlende Studium <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="😉"
    /> oder besser gesagt die andere Fachrichtung.<br />
Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336527</guid><dc:creator><![CDATA[Mackie1980]]></dc:creator><pubDate>Wed, 01 Aug 2007 12:50:44 GMT</pubDate></item></channel></rss>