<?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[Berechnungsvorschrift Hashing]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich sitze an einer Aufgabe bei der es darum geht einen String in einen Hash umzuwandeln und diese in eine Datenbank einzulesen, allerdings hapert es bei mir schon daran die Berechnungsvorschrift zu verstehen.<br />
Diese lautet wie folgt:<br />
1. string_hash(&quot;&quot;) = 0b00000000<br />
(Der Hash eines leeren Strings ist ein Null-byte)<br />
2. string_hash(str) = ROT(string_hash(head) XOR tail)<br />
Wobei str der String ist, der durch Anfügen der Bytes tail an den String head entsteht<br />
XOR ein bitweises Exkulsives-Oder<br />
ROT eine linksrum-Rotation eines Bytes um einen Byte ist<br />
(Beispiel: ROT(0b10000000) == 0b00000001)</p>
<p>Mein bisheriger Code:</p>
<pre><code>unsigned char string_hash(std::string s) {
	char ret = 0;
	for (int i = 0; i &lt; s.length(); i++){
                if((s.length()-i) == i)
                    break;
		int temp= s[s.length()-i]^s[i];
		ret = temp &lt;&lt; 1;
	}
	// weil später ein char als key verwendet wird, muss hier noch ein cast durchgeführt werden
	return (unsigned char)ret;
}
</code></pre>
<p>Hat jemand eine Idee dazu? Wie genau funktioniert das mit der Linksrotation?<br />
Mit dem links-shift ist es ja nicht getan<br />
Danke schon mal <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/topic/338653/berechnungsvorschrift-hashing</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 10:15:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338653.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Jun 2016 19:25:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Berechnungsvorschrift Hashing on Wed, 29 Jun 2016 19:25:57 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich sitze an einer Aufgabe bei der es darum geht einen String in einen Hash umzuwandeln und diese in eine Datenbank einzulesen, allerdings hapert es bei mir schon daran die Berechnungsvorschrift zu verstehen.<br />
Diese lautet wie folgt:<br />
1. string_hash(&quot;&quot;) = 0b00000000<br />
(Der Hash eines leeren Strings ist ein Null-byte)<br />
2. string_hash(str) = ROT(string_hash(head) XOR tail)<br />
Wobei str der String ist, der durch Anfügen der Bytes tail an den String head entsteht<br />
XOR ein bitweises Exkulsives-Oder<br />
ROT eine linksrum-Rotation eines Bytes um einen Byte ist<br />
(Beispiel: ROT(0b10000000) == 0b00000001)</p>
<p>Mein bisheriger Code:</p>
<pre><code>unsigned char string_hash(std::string s) {
	char ret = 0;
	for (int i = 0; i &lt; s.length(); i++){
                if((s.length()-i) == i)
                    break;
		int temp= s[s.length()-i]^s[i];
		ret = temp &lt;&lt; 1;
	}
	// weil später ein char als key verwendet wird, muss hier noch ein cast durchgeführt werden
	return (unsigned char)ret;
}
</code></pre>
<p>Hat jemand eine Idee dazu? Wie genau funktioniert das mit der Linksrotation?<br />
Mit dem links-shift ist es ja nicht getan<br />
Danke schon mal <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/2500541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500541</guid><dc:creator><![CDATA[Jasch]]></dc:creator><pubDate>Wed, 29 Jun 2016 19:25:57 GMT</pubDate></item><item><title><![CDATA[Reply to Berechnungsvorschrift Hashing on Wed, 29 Jun 2016 19:40:33 GMT]]></title><description><![CDATA[<p>Hast du schon einmal den Begriff &quot;Rekursion&quot; gehört?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500543</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 29 Jun 2016 19:40:33 GMT</pubDate></item><item><title><![CDATA[Reply to Berechnungsvorschrift Hashing on Wed, 29 Jun 2016 19:43:01 GMT]]></title><description><![CDATA[<p>Der Begriff &quot;Rekursion&quot; ist mir bekannt. In der Besprechung der letzten Übungsaufgaben wurde allerdings gesagt, dass dies hier auch einfach iterativ zu lösen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500544</guid><dc:creator><![CDATA[Jasch]]></dc:creator><pubDate>Wed, 29 Jun 2016 19:43:01 GMT</pubDate></item><item><title><![CDATA[Reply to Berechnungsvorschrift Hashing on Wed, 29 Jun 2016 20:25:10 GMT]]></title><description><![CDATA[<p>Jasch schrieb:</p>
<blockquote>
<p>Wie genau funktioniert das mit der Linksrotation?<br />
Mit dem links-shift ist es ja nicht getan</p>
</blockquote>
<p>Beim Links-Shiften fliegen die Bits die links keinen Platz mehr haben raus, und von rechts kommen 0-Bits dazu.<br />
Beim Links-Rotieren werden die Bits die links keinen Platz mehr haben von rechts wieder reingeschoben.</p>
<p>Also z.B.</p>
<p>ABCDEFGH<br />
um 2 nach links rotiert, bei Registerbreite 8, ergibt<br />
CDEFGHAB</p>
<p>C++ hat da dummerweise keinen Operator dafür. Man kann Rotieren aber natürlich mit mehreren Shifts + einer von mehreren Rechenoperationen (z.B. XOR, OR, Addition) nachbilden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500549</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 29 Jun 2016 20:25:10 GMT</pubDate></item></channel></rss>