<?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[XOR von char* Arrays]]></title><description><![CDATA[<p>Hi Leute,<br />
ich hab ein Problem mit dem verxoren von mehreren char* Arrays und zwar übernimmt die XOR Funktion eine Liste von Units, welche aus einem Wort und der Größe des Wortes bestehen und soll diese alle miteinander verxoren.</p>
<p>Beispiel zur Erstellung:<br />
hallo ^ servus ^ moin = xorUnit</p>
<p>Beispiel zur Wiederherstellung:<br />
moin ^ hallo ^ xorUnit = servus</p>
<p>Allerdings geht dies nicht und ich erhalte nur &quot;serv&quot;, da mir die Länge da irgendwie Schwierigkeiten bereitet. Ich hoffe Ihr könnt mit helfen <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="🙂"
    /></p>
<pre><code>#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;vector&gt;

using namespace std;

struct UNIT
{
   int size;
   char *content;
};

UNIT XOR( vector&lt;UNIT&gt; list )
{
  char* unit;
  char* temp;

  UNIT xorUnit;   
  int unitLength = 0;
  int maxLength = 0;
  int minLength = 0;
  int bigger = 0;

  for( int i = 0; i &lt; list.size(); i++ )
  {
    unitLength = list[i].size;

    if( minLength == 0 &amp;&amp; maxLength == 0 ) 
    {
      maxLength = unitLength;
    }
    else if( unitLength &gt; maxLength )
    {
      minLength = maxLength;
      maxLength = unitLength;
      bigger = 1;
    }
    else if( unitLength &lt; maxLength )
    {
      minLength = unitLength; 
      bigger = 0;
    }
    printf(&quot;bigger: %d\n&quot;, bigger);
    printf(&quot;MaxLänge: %d\n&quot;, maxLength);
    printf(&quot;MinLänge: %d\n&quot;, minLength);   

    temp = new char[maxLength];

    for(int j = 0; j &lt; minLength; j++)
    {
      temp[j] = list[i].content[j] ^ unit[j];
    }
    for(int j = minLength; j &lt; maxLength; j++)
    {
      temp[j] = list[i].content[j];
    }
    unit = temp;
  }

  xorUnit.content = unit;
  if( bigger == 0 ) {
    xorUnit.size = minLength;
  } else {
    xorUnit.size = maxLength;
  }
  bigger = 0;

  return xorUnit;
}

int main(int argc,char **argv) {      
  int i;

  vector&lt;UNIT&gt; list;
  vector&lt;UNIT&gt; backupList;

  //Eingabeunits
  UNIT input1;
  UNIT input2;
  UNIT input3;

  UNIT xorUnit;  
  UNIT output;

  input1.size = 5;
  input1.content = &quot;hallo&quot;;    
  input2.size = 6;
  input2.content = &quot;servus&quot;;  
  input3.size = 4;
  input3.content = &quot;moin&quot;;

  list.push_back( input1 );
  list.push_back( input2 );  
  list.push_back( input3 );  

  for( i = 0; i &lt; list.size(); i++ )
  {
     output = list[i];
     printf(&quot;Vector(%d): %s %d\n&quot;, i, output.content, output.size);
  }

  xorUnit = XOR( list );
  printf(&quot;XOR: %s %d\n\n\n&quot;, xorUnit.content, xorUnit.size);

  backupList.push_back( input3 );
  backupList.push_back( input1 );  
  backupList.push_back( xorUnit );  

  for( i = 0; i &lt; backupList.size(); i++ )
  {
     output = backupList[i];
     printf(&quot;Vector(%d): %s %d\n&quot;, i, output.content, output.size);
  } 

  xorUnit = XOR( backupList );
  printf(&quot;XOR: %s %d\n&quot;, xorUnit.content, xorUnit.size); 

  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/322886/xor-von-char-arrays</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 13:41:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322886.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Jan 2014 18:39:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to XOR von char* Arrays on Fri, 10 Jan 2014 18:39:25 GMT]]></title><description><![CDATA[<p>Hi Leute,<br />
ich hab ein Problem mit dem verxoren von mehreren char* Arrays und zwar übernimmt die XOR Funktion eine Liste von Units, welche aus einem Wort und der Größe des Wortes bestehen und soll diese alle miteinander verxoren.</p>
<p>Beispiel zur Erstellung:<br />
hallo ^ servus ^ moin = xorUnit</p>
<p>Beispiel zur Wiederherstellung:<br />
moin ^ hallo ^ xorUnit = servus</p>
<p>Allerdings geht dies nicht und ich erhalte nur &quot;serv&quot;, da mir die Länge da irgendwie Schwierigkeiten bereitet. Ich hoffe Ihr könnt mit helfen <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="🙂"
    /></p>
<pre><code>#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;vector&gt;

using namespace std;

struct UNIT
{
   int size;
   char *content;
};

UNIT XOR( vector&lt;UNIT&gt; list )
{
  char* unit;
  char* temp;

  UNIT xorUnit;   
  int unitLength = 0;
  int maxLength = 0;
  int minLength = 0;
  int bigger = 0;

  for( int i = 0; i &lt; list.size(); i++ )
  {
    unitLength = list[i].size;

    if( minLength == 0 &amp;&amp; maxLength == 0 ) 
    {
      maxLength = unitLength;
    }
    else if( unitLength &gt; maxLength )
    {
      minLength = maxLength;
      maxLength = unitLength;
      bigger = 1;
    }
    else if( unitLength &lt; maxLength )
    {
      minLength = unitLength; 
      bigger = 0;
    }
    printf(&quot;bigger: %d\n&quot;, bigger);
    printf(&quot;MaxLänge: %d\n&quot;, maxLength);
    printf(&quot;MinLänge: %d\n&quot;, minLength);   

    temp = new char[maxLength];

    for(int j = 0; j &lt; minLength; j++)
    {
      temp[j] = list[i].content[j] ^ unit[j];
    }
    for(int j = minLength; j &lt; maxLength; j++)
    {
      temp[j] = list[i].content[j];
    }
    unit = temp;
  }

  xorUnit.content = unit;
  if( bigger == 0 ) {
    xorUnit.size = minLength;
  } else {
    xorUnit.size = maxLength;
  }
  bigger = 0;

  return xorUnit;
}

int main(int argc,char **argv) {      
  int i;

  vector&lt;UNIT&gt; list;
  vector&lt;UNIT&gt; backupList;

  //Eingabeunits
  UNIT input1;
  UNIT input2;
  UNIT input3;

  UNIT xorUnit;  
  UNIT output;

  input1.size = 5;
  input1.content = &quot;hallo&quot;;    
  input2.size = 6;
  input2.content = &quot;servus&quot;;  
  input3.size = 4;
  input3.content = &quot;moin&quot;;

  list.push_back( input1 );
  list.push_back( input2 );  
  list.push_back( input3 );  

  for( i = 0; i &lt; list.size(); i++ )
  {
     output = list[i];
     printf(&quot;Vector(%d): %s %d\n&quot;, i, output.content, output.size);
  }

  xorUnit = XOR( list );
  printf(&quot;XOR: %s %d\n\n\n&quot;, xorUnit.content, xorUnit.size);

  backupList.push_back( input3 );
  backupList.push_back( input1 );  
  backupList.push_back( xorUnit );  

  for( i = 0; i &lt; backupList.size(); i++ )
  {
     output = backupList[i];
     printf(&quot;Vector(%d): %s %d\n&quot;, i, output.content, output.size);
  } 

  xorUnit = XOR( backupList );
  printf(&quot;XOR: %s %d\n&quot;, xorUnit.content, xorUnit.size); 

  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2376518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376518</guid><dc:creator><![CDATA[Fox90]]></dc:creator><pubDate>Fri, 10 Jan 2014 18:39:25 GMT</pubDate></item><item><title><![CDATA[Reply to XOR von char* Arrays on Fri, 10 Jan 2014 20:37:23 GMT]]></title><description><![CDATA[<p>Nimm doch std::string für Zeichenketten! Du benutzt da bei deinen char* eine historisch erlaubte Umwandlung von const char* nach char* (Zeile 90 ff.). Auch wenn das erlaubt ist, so gehen doch in aller Regel alle späteren Versuche, die chars zu modifizieren, schief. Weiterhin erzeugst du wunderschöne Speicherlöcher mit deiner manuellen Speicherverwaltung.<br />
Zu deinem Problem: Keine Ahnung, ich blick da nicht durch. Ich würde einfach das erste Wort nehmen, mit dem nächsten verXORen, bei Bedarf hinten was dranhängen. Fortfahren mit allen Worten. Auch da ist es natürlich günstig, wenn man einen dynamischen String hätte. Dann könnte man sich 90% des Codes sparen (das ist kein Scherz! Eher mehr.), zumal ziemlich sicher das beschriebene Problem genau bei deiner Längenbestimmung auftritt. Ich habe leider gar keinen Plan, wieso du dort machst, was du machst, daher kann ich auf keine bestimmte Zeile als Fehlerursache zeigen. Vermutlich ist der Algorithmus einfach komplett falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2376558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376558</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 10 Jan 2014 20:37:23 GMT</pubDate></item><item><title><![CDATA[Reply to XOR von char* Arrays on Fri, 10 Jan 2014 21:14:47 GMT]]></title><description><![CDATA[<p>Nimm doch bitte reines C++, auf Arrays zu arbeiten kann man sich dank der STL meist sparen. So zum Beispiel:</p>
<pre><code>#include &lt;iostream&gt; 
#include &lt;iomanip&gt; 
#include &lt;stdlib.h&gt; 
#include &lt;stdio.h&gt; 
#include &lt;string.h&gt; 
#include &lt;vector&gt; 
#include &lt;algorithm&gt;

using namespace std; 

string XOR(vector&lt;string&gt; list) 
{ 
	string xorUnit;  
	for( int i = 0; i &lt; list.size(); i++ ) 
	{ 
		string unit = list[i];
		if(unit.size() &gt; xorUnit.size())
			xorUnit.resize(unit.size(), 0);

		transform(unit.begin(), unit.end(), xorUnit.begin(), xorUnit.begin(), bit_xor&lt;char&gt;());
	}
	return xorUnit; 
} 

int main(int argc, char **argv) 
{
	string input1 = &quot;hallo&quot;;
	string input2 = &quot;servus&quot;;
	string input3= &quot;moin&quot;;

	vector&lt;string&gt; list;
	list.push_back(input1); 
	list.push_back(input2);   
	list.push_back(input3);   

	for(int i = 0; i &lt; list.size(); i++) 
	{ 
		string output = list[i]; 
		printf(&quot;Vector(%d): %s %d\n&quot;, i, output.c_str(), output.size()); 
	} 

	string xorUnit = XOR(list); 

	vector&lt;string&gt; backupList; 
	backupList.push_back(input3); 
	backupList.push_back(input1);   
	backupList.push_back(xorUnit);   

	for(int i = 0; i &lt; backupList.size(); i++) 
	{ 
		string output = backupList[i]; 
		printf(&quot;Vector(%d): %s %d\n&quot;, i, output.c_str(), output.size()); 
	} 

	xorUnit = XOR( backupList); 
	printf(&quot;XOR: %s %d\n&quot;, xorUnit.c_str(), xorUnit.size()); 

	return 0; 
}
</code></pre>
<p>Hoffe das &quot;transform&quot; passt so, konnte das nie wirklich gut...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2376564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376564</guid><dc:creator><![CDATA[DarkShadow44]]></dc:creator><pubDate>Fri, 10 Jan 2014 21:14:47 GMT</pubDate></item><item><title><![CDATA[Reply to XOR von char* Arrays on Fri, 10 Jan 2014 21:22:58 GMT]]></title><description><![CDATA[<p>Ah ok vielen Dank euch beiden <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="🙂"
    /> <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="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2376566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376566</guid><dc:creator><![CDATA[Fox90]]></dc:creator><pubDate>Fri, 10 Jan 2014 21:22:58 GMT</pubDate></item><item><title><![CDATA[Reply to XOR von char* Arrays on Sat, 11 Jan 2014 09:30:24 GMT]]></title><description><![CDATA[<p>Wenn noch</p>
<pre><code>#include &lt;string.h&gt;
</code></pre>
<p>durch</p>
<pre><code>#include &lt;string&gt;
</code></pre>
<p>ersetzt wird, ist es fast perfekt <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>
<p>Ich sehe gerade die &quot;printf&quot;s *grusel*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2376619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2376619</guid><dc:creator><![CDATA[MichelRT]]></dc:creator><pubDate>Sat, 11 Jan 2014 09:30:24 GMT</pubDate></item></channel></rss>