<?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[string für Berechnungen umwandeln]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>schon seit Monaten plackt mich ein Problem und ich habe noch keine optimale Lösung gefunden. Für einen Verschlüsselungsalgorithmus muss ich einen std::string auf ein unsigned long abbilden. Die Berechnungen des Algorithmus sind nicht string kompatibel.<br />
Die gängigen Umwandlungssachen gehen (natürlicherweise) davon aus dass nur Zahlen in dem string stehen, bei ner Verschlüsselung sinds natürlich auch Buchtsaben.<br />
Zur Zeit wandle ich das Zeichen für Zeichen in ASCII Code um und &quot;schreib&quot; die quasi zu ner Zahl hintereinander. Also aus &quot;AB&quot; wird zum Beispiel die Zahl &quot;6162&quot;. Das ist aber subotimal und gibt einige Probleme.<br />
Hoffe das Problem ist verständlich und jemand weiss ne elegante Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/141106/string-für-berechnungen-umwandeln</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 08:55:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/141106.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 19 Mar 2006 12:02:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to string für Berechnungen umwandeln on Sun, 19 Mar 2006 12:02:34 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>schon seit Monaten plackt mich ein Problem und ich habe noch keine optimale Lösung gefunden. Für einen Verschlüsselungsalgorithmus muss ich einen std::string auf ein unsigned long abbilden. Die Berechnungen des Algorithmus sind nicht string kompatibel.<br />
Die gängigen Umwandlungssachen gehen (natürlicherweise) davon aus dass nur Zahlen in dem string stehen, bei ner Verschlüsselung sinds natürlich auch Buchtsaben.<br />
Zur Zeit wandle ich das Zeichen für Zeichen in ASCII Code um und &quot;schreib&quot; die quasi zu ner Zahl hintereinander. Also aus &quot;AB&quot; wird zum Beispiel die Zahl &quot;6162&quot;. Das ist aber subotimal und gibt einige Probleme.<br />
Hoffe das Problem ist verständlich und jemand weiss ne elegante Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019575</guid><dc:creator><![CDATA[wolfcastle]]></dc:creator><pubDate>Sun, 19 Mar 2006 12:02:34 GMT</pubDate></item><item><title><![CDATA[Reply to string für Berechnungen umwandeln on Sun, 19 Mar 2006 12:10:58 GMT]]></title><description><![CDATA[<p>wolfcastle schrieb:</p>
<blockquote>
<p>Also aus &quot;AB&quot; wird zum Beispiel die Zahl &quot;6162&quot;. Das ist aber subotimal und gibt einige Probleme.<br />
Hoffe das Problem ist verständlich und jemand weiss ne elegante Lösung.</p>
</blockquote>
<p>Wo ist denn genau das Problem? Das ist ne 1zu1 Umwandlung von Text in Zahl. Jeder Zahl entspricht genau ein Text und umgekehrt auch. Natürlich sind andere Kodierungen denkbar, aber diese ist doch eigentlich einfach und elegant. Was genau macht denn dann Schwierigkeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019578</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sun, 19 Mar 2006 12:10:58 GMT</pubDate></item><item><title><![CDATA[Reply to string für Berechnungen umwandeln on Sun, 19 Mar 2006 12:41:39 GMT]]></title><description><![CDATA[<p>Das Hauptproblem ist die dadurch entstehende Variable Länge des unsigned long. Da ja ASCII 2 oder 3 stellig sein können. Und da es keine führende Null gibt, ist die resultierende Länge des unsigned long Variabel. Zum besseren verständnis die Implementierung der Umrechnung momentan:</p>
<pre><code class="language-cpp">unsigned long PT;
string text;

//Transform string into long unsigned
for(int j=0;j&lt;text.length();j++)
{
  PT  = PT*1000;
  PT=PT+text.at(j);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1019600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019600</guid><dc:creator><![CDATA[wolfcastle]]></dc:creator><pubDate>Sun, 19 Mar 2006 12:41:39 GMT</pubDate></item><item><title><![CDATA[Reply to string für Berechnungen umwandeln on Sun, 19 Mar 2006 12:46:39 GMT]]></title><description><![CDATA[<p>Das kommt davon dass Du das Gebilde &quot;Zahl&quot; aus seinem binären Kontext herausreisst und in das weltliche Dezimalsystem presst. Im binären Kontext hat doch jedes Zeichen genau acht Stellen und jede (32-bit) Zahl genau 32 Stellen, das passt ganz prima <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>
<pre><code class="language-cpp">char x[5] = &quot;abcd&quot;; // 5 wegen nullbyte
int y = *(int*)x;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1019604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019604</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sun, 19 Mar 2006 12:46:39 GMT</pubDate></item><item><title><![CDATA[Reply to string für Berechnungen umwandeln on Sun, 19 Mar 2006 12:55:20 GMT]]></title><description><![CDATA[<p>Hmm das klappt ja tatsächlich. <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="🙂"
    /> Das mit dem binären Kontext war mir auch bewusst, deswegen suchte ich eine bessere Lösung. Dachte jedoch nicht, dass das über ein einfaches tycast funktioniert. Wenn mir jetzt noch jemand erklärt, wie das intern genau funktioniert (also was er da macht) bin ich glücklich :).</p>
<p>PS: Naja klappt doch nich ganz. Irgendwie kommt bei zweimal das selbe Typecasten zwei verschiedene Sachen raus, schon merkwürdig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019609</guid><dc:creator><![CDATA[wolfcastle]]></dc:creator><pubDate>Sun, 19 Mar 2006 12:55:20 GMT</pubDate></item><item><title><![CDATA[Reply to string für Berechnungen umwandeln on Sun, 19 Mar 2006 12:56:57 GMT]]></title><description><![CDATA[<p>Nimm mal 4 Asciizeichen und schreib Dir deren Werte auf. Jetzt schreibst Du die 4 mal binär alle hintereinander. Anschließend rechnest Du mal aus, was passiert, wenn Du diesen Salat aus 32 Bits jetzt als Zahl interpretierst. Genau das tut der Rechner. Da der aber sowieso mit der Binärdarstellung arbeitet muß er nichtmal umwandeln sondern kann einfach dei Interpretation (mit dem cast) ändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019611</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sun, 19 Mar 2006 12:56:57 GMT</pubDate></item><item><title><![CDATA[Reply to string für Berechnungen umwandeln on Sun, 19 Mar 2006 12:59:48 GMT]]></title><description><![CDATA[<p>Ah danke das Prinzip klingt gut. Mein problem löiegt wohl wonaders im Code, naja auf jeden Fall habt ihr mir geholfen, thx.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019614</guid><dc:creator><![CDATA[wolfcastle]]></dc:creator><pubDate>Sun, 19 Mar 2006 12:59:48 GMT</pubDate></item><item><title><![CDATA[Reply to string für Berechnungen umwandeln on Sun, 19 Mar 2006 14:00:34 GMT]]></title><description><![CDATA[<p>Hmm jetzt hab ich doch noch nen Problem damit. Hab nen bissel rumprobiert und nicht geschafft das ganze wieder umzudrehen.<br />
Der folgende Code liefert nen illegalen TypeCast:</p>
<pre><code class="language-cpp">char x[5] = &quot;abcd&quot;; // 5 wegen nullbyte
int y = *(int*)x;
x=*(char*[5])y;
</code></pre>
<p>Gibt es für das Rückumwandeln auch ne Möglichkeit oder is das ganze ne Einbahnstrasse?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019656</guid><dc:creator><![CDATA[wolfcastle]]></dc:creator><pubDate>Sun, 19 Mar 2006 14:00:34 GMT</pubDate></item><item><title><![CDATA[Reply to string für Berechnungen umwandeln on Sun, 19 Mar 2006 14:45:41 GMT]]></title><description><![CDATA[<p>Zurück gehts so</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main() {
    char x[5] = &quot;abcd&quot;; // 5 wegen nullbyte
    int y = *(int*)x;
    printf(&quot;%s\n&quot;, x );
    printf(&quot;%d\n&quot;, y );
    y+=1;  // leicht ändern
    *(int*)x=y;
    x[4]=0; // um sicher zu sein
    printf(&quot;%s\n&quot;, x );
}
</code></pre>
<p>Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019687</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Sun, 19 Mar 2006 14:45:41 GMT</pubDate></item><item><title><![CDATA[Reply to string für Berechnungen umwandeln on Sun, 19 Mar 2006 14:52:58 GMT]]></title><description><![CDATA[<p>*verwirrt schau* Okay das klappt, kann mir auch jemand erklären warum ich den Typecast indem Fall auf der linken Seite machen muss?<br />
Btw ist bei mir die Erhöhung um 1 nicht notwendig, führt sogar zum falschen Ergebniss (&quot;bbcd&quot;). Warum hast du sie also eingebaut?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1019695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019695</guid><dc:creator><![CDATA[wolfcastle]]></dc:creator><pubDate>Sun, 19 Mar 2006 14:52:58 GMT</pubDate></item><item><title><![CDATA[Reply to string für Berechnungen umwandeln on Sun, 19 Mar 2006 15:11:31 GMT]]></title><description><![CDATA[<p>wolfcastle schrieb:</p>
<blockquote>
<p>*verwirrt schau* Okay das klappt, kann mir auch jemand erklären warum ich den Typecast indem Fall auf der linken Seite machen muss?<br />
Btw ist bei mir die Erhöhung um 1 nicht notwendig, führt sogar zum falschen Ergebniss (&quot;bbcd&quot;). Warum hast du sie also eingebaut?</p>
</blockquote>
<p>Die Erhöhung hab ich nur eingebaut damit du sicher sein kannst dass nicht wieder der ursprüngliche String ausgegeben wird ( ist natürlich unnötig ).<br />
Warum der cast auf der linken Seite ?. Keine Ahnung. Weil's sonst nicht funktioniert ? ( gibt sicher eine technischere Erklärung,hab aber momentan nicht den Kopf dazu mir das zu überlegen )<br />
Kannst auch</p>
<pre><code class="language-cpp">memcpy(x, &amp;y, sizeof(int));
</code></pre>
<p>verwenden. Dann brauchst du gar keinen cast.</p>
<p>Kurt</p>
<p>EDIT:<br />
Die technischere Erklärung is dass eine Zuweisung an ein char array mittls = operator nicht funktioniert.<br />
zb</p>
<pre><code class="language-cpp">char buffer[5];
  buffer = &quot;abcd&quot;; // fehler
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1019704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1019704</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Sun, 19 Mar 2006 15:11:31 GMT</pubDate></item></channel></rss>