<?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[[Datei-Verschluessler] Wo ist der Fehler?]]></title><description><![CDATA[<p>Hallo.<br />
Ich hab mir heut ein kleines Programm gebastelt, dass Dateien verschluesselt und auch wieder entschluesselt. Leider klappt das aber nur teilweise. Bestimmte Zeichen werden anscheinend falsch verschluesselt oder entschluesselt.</p>
<p>inhalt ist ein <code>string</code> in der der gesamte Dateiinhalt enthalten ist.</p>
<p>Verschluessler:</p>
<pre><code class="language-cpp">for (size_t i=0; i&lt;inhalt.size(); i++)
	{
		if (inhalt[i] &lt; 255)
		{
			inhalt[i] += 1;
		}
		else
		{
			inhalt[i] = 0;
		}
	}
</code></pre>
<p>Entschluessler:</p>
<pre><code class="language-cpp">for (size_t i=0; i&lt;inhalt.size(); i++)
	{
		if (inhalt[i] &gt; 0)
		{
			inhalt[i] -= 1;
		}
		else
		{
			inhalt[i] = 255;
		}
	}
</code></pre>
<p>Wo ist nur der Fehler?</p>
<p>Gruss,<br />
Cartman</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/232984/datei-verschluessler-wo-ist-der-fehler</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 03:25:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/232984.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 29 Jan 2009 19:19:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Datei-Verschluessler] Wo ist der Fehler? on Thu, 29 Jan 2009 19:19:54 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Ich hab mir heut ein kleines Programm gebastelt, dass Dateien verschluesselt und auch wieder entschluesselt. Leider klappt das aber nur teilweise. Bestimmte Zeichen werden anscheinend falsch verschluesselt oder entschluesselt.</p>
<p>inhalt ist ein <code>string</code> in der der gesamte Dateiinhalt enthalten ist.</p>
<p>Verschluessler:</p>
<pre><code class="language-cpp">for (size_t i=0; i&lt;inhalt.size(); i++)
	{
		if (inhalt[i] &lt; 255)
		{
			inhalt[i] += 1;
		}
		else
		{
			inhalt[i] = 0;
		}
	}
</code></pre>
<p>Entschluessler:</p>
<pre><code class="language-cpp">for (size_t i=0; i&lt;inhalt.size(); i++)
	{
		if (inhalt[i] &gt; 0)
		{
			inhalt[i] -= 1;
		}
		else
		{
			inhalt[i] = 255;
		}
	}
</code></pre>
<p>Wo ist nur der Fehler?</p>
<p>Gruss,<br />
Cartman</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654583</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Thu, 29 Jan 2009 19:19:54 GMT</pubDate></item><item><title><![CDATA[Reply to [Datei-Verschluessler] Wo ist der Fehler? on Thu, 29 Jan 2009 19:31:03 GMT]]></title><description><![CDATA[<p>schau doch mal mit einem debugger nach, da siehst du sofort was schief läuft.<br />
tip: strings bestehen nicht aus unsigned chars.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654594</guid><dc:creator><![CDATA[ununterschrieben]]></dc:creator><pubDate>Thu, 29 Jan 2009 19:31:03 GMT</pubDate></item><item><title><![CDATA[Reply to [Datei-Verschluessler] Wo ist der Fehler? on Thu, 29 Jan 2009 19:58:16 GMT]]></title><description><![CDATA[<p>ununterschrieben schrieb:</p>
<blockquote>
<p>schau doch mal mit einem debugger nach, da siehst du sofort was schief läuft.<br />
tip: strings bestehen nicht aus unsigned chars.</p>
</blockquote>
<p>Hab das nun geaendert und bei Text-Dateien klappt das jetzt ganz gut, glaube ich zumindest...<br />
Aber wenn ich ein Bild verschluessle/entschluessle, dann kommt irgendwie murgs raus... (aber das Bild kann man komischerweise trotzdem ansehen)</p>
<p><strong>Bild vor dem verschluesseln</strong><br />
<a href="http://img228.imageshack.us/img228/3413/bild2ss9.jpg" rel="nofollow">http://img228.imageshack.us/img228/3413/bild2ss9.jpg</a></p>
<p><strong>Bild nach dem verschluesseln/entschluesseln</strong><br />
<a href="http://img175.imageshack.us/img175/3634/bildcr0.jpg" rel="nofollow">http://img175.imageshack.us/img175/3634/bildcr0.jpg</a></p>
<p>Der Code sieht jetzt so aus:</p>
<pre><code class="language-cpp">// Verschluesseln
	for (size_t i=0; i&lt;inhalt.size(); i++)
	{
		if (inhalt[i] &lt; 127)
		{
			inhalt[i] += 1;
		}
		else
		{
			inhalt[i] = -127;
		}
	}

	// Entschluesseln
	for (size_t i=0; i&lt;inhalt.size(); i++)
	{
		if (inhalt[i] &gt; -127)
		{
			inhalt[i] -= 1;
		}
		else
		{
			inhalt[i] = 127;
		}
	}
</code></pre>
<p>Warum wird das Bild nicht mehr richtig entschluesselt?<br />
Muss ja einen Grund geben <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>
<p>Gruss<br />
Cartman</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654617</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Thu, 29 Jan 2009 19:58:16 GMT</pubDate></item><item><title><![CDATA[Reply to [Datei-Verschluessler] Wo ist der Fehler? on Thu, 29 Jan 2009 20:18:34 GMT]]></title><description><![CDATA[<p>Ich würde nicht unbedingt <code>std::string</code> verwenden, da das ein <code>typedef</code> für <code>std::basic_string&lt;char&gt;</code> ist und <code>char</code> sich je nachdem wie <code>signed char</code> oder <code>unsigned char</code> verhält. Vielleicht besser eine weitere Instanziierung des <code>basic_string</code> -Templates...</p>
<p>Zudem:</p>
<pre><code class="language-cpp">else
        {
            inhalt[i] = -127;
        }
</code></pre>
<p>Hier wird ja die Hälfte des Wertebereichs auf eine Zahl abgebildet. So ist die Bijektivität nicht mehr gegeben; wie soll beim Entschlüsseln entschieden werden, welcher ursprünglichen Zahl die -127 entsprochen hat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654630</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 29 Jan 2009 20:18:34 GMT</pubDate></item><item><title><![CDATA[Reply to [Datei-Verschluessler] Wo ist der Fehler? on Thu, 29 Jan 2009 20:43:56 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Ich würde nicht unbedingt <code>std::string</code> verwenden, da das ein <code>typedef</code> für <code>std::basic_string&lt;char&gt;</code> ist und <code>char</code> sich je nachdem wie <code>signed char</code> oder <code>unsigned char</code> verhält. Vielleicht besser eine weitere Instanziierung des <code>basic_string</code> -Templates...</p>
<p>Zudem:</p>
<pre><code class="language-cpp">else
        {
            inhalt[i] = -127;
        }
</code></pre>
<p>Hier wird ja die Hälfte des Wertebereichs auf eine Zahl abgebildet. So ist die Bijektivität nicht mehr gegeben; wie soll beim Entschlüsseln entschieden werden, welcher ursprünglichen Zahl die -127 entsprochen hat?</p>
</blockquote>
<p>Also den Anfang deines Posts versteh ich nich ... (bin Anfaenger) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Meinst du damit, dass es nich immer sicher ist, ob <code>char</code>  <code>signed</code> oder <code>unsigned</code> ist (bezugelich des strings).</p>
<p>Zum zweiteren:<br />
Es ist ja so... Der ASCII-Wert des Zeichens wird immer um 1 erhoeht. Wenn es sich aber um ein Zeichen handelt, dass schon den maximalen Wert hat (127) wird der auf das minimalste (-127) gesetzt ... Beim entschluesseln weiss ich ja dann, dass alle Zeichen die -127 sind vor dem Verschluesseln 127 waren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654645</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Thu, 29 Jan 2009 20:43:56 GMT</pubDate></item><item><title><![CDATA[Reply to [Datei-Verschluessler] Wo ist der Fehler? on Thu, 29 Jan 2009 21:01:00 GMT]]></title><description><![CDATA[<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Also den Anfang deines Posts versteh ich nich ... (bin Anfaenger) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Meinst du damit, dass es nich immer sicher ist, ob <code>char</code>  <code>signed</code> oder <code>unsigned</code> ist (bezugelich des strings).</p>
</blockquote>
<p>Ja, also C++ kennt die drei <strong>verschiedenen</strong> Typen:</p>
<pre><code class="language-cpp">char
signed char
unsigned char
</code></pre>
<p>Ob sich <code>char</code> nun bezüglich des Wertebereichs wie <code>signed</code> oder <code>unsigned</code> verhält, ist implementierungsspezifisch. Deshalb sollte man nicht davon ausgehen, dass der Wertebereich von -128 bis 127 geht.</p>
<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Es ist ja so... Der ASCII-Wert des Zeichens wird immer um 1 erhoeht. Wenn es sich aber um ein Zeichen handelt, dass schon den maximalen Wert hat (127) wird der auf das minimalste (-127) gesetzt ... Beim entschluesseln weiss ich ja dann, dass alle Zeichen die -127 sind vor dem Verschluesseln 127 waren...</p>
</blockquote>
<p>Klar. Sorry, ich hab da grad nicht durchgeblickt, bin vom falschen Wertebereich ausgegangen... Aber das Minimum wäre dennoch -128. <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/1654651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654651</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 29 Jan 2009 21:01:00 GMT</pubDate></item><item><title><![CDATA[Reply to [Datei-Verschluessler] Wo ist der Fehler? on Thu, 29 Jan 2009 21:11:08 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a><br />
Ahja, jetzt hab ich es begriffen, thx <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="🙂"
    /> - kann mich auch ganz dunkel daran erinnern, dass das irgendwo auch in meinem C++-Buch besprochen wurde <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 />
Nur wie loese ich jetzt das Problem, wenn ich will dass mein Code Compiler-unabhaengig funktioniert? Waere ein dynamischer signed char-vector das richtige?</p>
<p>Uebrigens funktioniert mein Programm jetzt. Musste nur die -127 - Werte mit -128 ersetzen... thx <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1654658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654658</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Thu, 29 Jan 2009 21:11:08 GMT</pubDate></item><item><title><![CDATA[Reply to [Datei-Verschluessler] Wo ist der Fehler? on Thu, 29 Jan 2009 21:13:27 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Also den Anfang deines Posts versteh ich nich ... (bin Anfaenger) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Meinst du damit, dass es nich immer sicher ist, ob <code>char</code>  <code>signed</code> oder <code>unsigned</code> ist (bezugelich des strings).</p>
</blockquote>
<p>Ja, also C++ kennt die drei <strong>verschiedenen</strong> Typen:</p>
<pre><code class="language-cpp">char
signed char
unsigned char
</code></pre>
<p>Ob sich <code>char</code> nun bezüglich des Wertebereichs wie <code>signed</code> oder <code>unsigned</code> verhält, ist implementierungsspezifisch. Deshalb sollte man nicht davon ausgehen, dass der Wertebereich von -128 bis 127 geht.</p>
</blockquote>
<p>=&gt;<br />
nimm std::numeric_limits &lt;char&gt;::max() bzw. std::numeric_limits &lt;char&gt;::min() und schau davor, ob max() und min() makro aus der winapi ausgeschalten ist ^^</p>
<p>allerdings müsste es mit -128 auch bei nem unsigned typen gehen?!</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654660</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 29 Jan 2009 21:13:27 GMT</pubDate></item><item><title><![CDATA[Reply to [Datei-Verschluessler] Wo ist der Fehler? on Thu, 29 Jan 2009 21:15:23 GMT]]></title><description><![CDATA[<p>Ein <code>std::vector&lt;signed char&gt;</code> wäre nicht schlecht, zumal es ja hier nicht um den String als Zeichenkette sondern um den Container von einzelnen Zeichen geht.</p>
<p>Ansonsten - wenn du die Funktionalität von <code>std::string</code> benötigst - kannst du wie gesagt das Template einsetzen:</p>
<pre><code class="language-cpp">typedef std::basic_string&lt;signed char&gt; SignedString;
</code></pre>
<p><strong>@ unskilled</strong><br />
Ich bin mir nicht mehr ganz sicher, aber ich dachte, die Umwandlung negativer Zahlen zu <code>unsigned</code> wäre auch implementierungsspezifisch... Irgendwie kann man sich ja auf nichts wirklich verlassen. <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>Das mit <code>numeric_limits</code> finde ich unnötig, da man gleich <code>signed char</code> nehmen kann, um sicher zu gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654661</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 29 Jan 2009 21:15:23 GMT</pubDate></item><item><title><![CDATA[Reply to [Datei-Verschluessler] Wo ist der Fehler? on Thu, 29 Jan 2009 21:15:27 GMT]]></title><description><![CDATA[<p>ich würde bei datei und vector bei char bleiben und nur beim rechnen casten.</p>
<pre><code class="language-cpp">for (size_t i=0; i&lt;inhalt.size(); i++) 
    { 
        unsigned char x=inhalt[i];
        ++x;
        inhalt[i]=x; 
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1654662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654662</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 29 Jan 2009 21:15:27 GMT</pubDate></item><item><title><![CDATA[Reply to [Datei-Verschluessler] Wo ist der Fehler? on Thu, 29 Jan 2009 21:17:40 GMT]]></title><description><![CDATA[<p>Nimm std::vector&lt;unsigned char&gt; und lass das if-Konstrukt weg. Ein Überlauf führt zum gleichen Ergebnis, egal was für einen Wertebereich du hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654668</guid><dc:creator><![CDATA[Überläufer]]></dc:creator><pubDate>Thu, 29 Jan 2009 21:17:40 GMT</pubDate></item><item><title><![CDATA[Reply to [Datei-Verschluessler] Wo ist der Fehler? on Thu, 29 Jan 2009 21:29:24 GMT]]></title><description><![CDATA[<p>Okay, also ob ich <code>std::basic_string&lt;signed char&gt;</code> oder <code>std::vector&lt;signed char&gt;</code> nehme spielt also keine Rolle oder?</p>
<p>@Ueberlaeufer<br />
Sicher? Gilt das auch fuer alle Compiler/Plattformen?</p>
<p>Ich bin jetzt noch etwas verwirrt wegen <code>char</code> ...<br />
Warum gibt es <code>signed char</code> und <code>unsigned char</code> ???<br />
Waere 256 nicht dasselbe Zeichen wie -1?<br />
Und ich bin mir jetzt noch wegen des einlesens von der Datei unsicher... Wird das Zeichen immer als <code>signed</code> eingelesen? (mit <code>fileobject.get()</code> )</p>
<p><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/1654673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654673</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Thu, 29 Jan 2009 21:29:24 GMT</pubDate></item><item><title><![CDATA[Reply to [Datei-Verschluessler] Wo ist der Fehler? on Thu, 29 Jan 2009 22:03:31 GMT]]></title><description><![CDATA[<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Sicher? Gilt das auch fuer alle Compiler/Plattformen?</p>
</blockquote>
<p>Ja, aber nur für vorzeichenlose Typen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654695</guid><dc:creator><![CDATA[Überläufer]]></dc:creator><pubDate>Thu, 29 Jan 2009 22:03:31 GMT</pubDate></item></channel></rss>