Thema: Wort in 13-stellige Ziffer umrechnen?

Hallo,<BR>nehmen wir mal an, ich habe den Begriff "Banane" oder "Dampflokomotive" und möchte diesen in einer Routine generell auf eine 13-stellige numerische Zahl umrechnen .... wie würdet ihr das anstellen?

2

Re: Wort in 13-stellige Ziffer umrechnen?

High,<BR>ich weiß nicht genau, was Du mit umrechnen meinst. Wenn ich einem beliebigen Wort<BR>eine beliebige dreizehnstellige Zahl zuordnen<BR>möchte, kann ich das z.B. so machen:<P><BR><html><head><title>drz</title><BR><script language="JavaScript1.3"><BR>W=new Array();Z=new Array();<P>function S()<BR>{w=document.F.T.value;<BR> z=parseFloat(Math.round(Math.random()*8+1)+Math.random().toString().substr(2,12));<BR> W.push(w);Z.push(z);<BR>};<P>function G(){for(i in W)alert(W[i]+"    "+Z[i])};<BR></script><BR></head><BR><body><BR><form name="F"><BR><textarea name="T" rows=10 cols=30></textarea><br><BR><input type="button" onclick="S()" value="speichern"><BR><input type="button" onclick="G()" value="guggen"><BR></form><BR></body><BR></html><P>Hilft das was?<P>gruß<P>matho

Re: Wort in 13-stellige Ziffer umrechnen?

Ich glaube vielmehr, er will HASHen (nich kiffen *lol*)<P>Soll es eindeutig erfolgen? Hashing ist eigentlich natürlich nicht-eindeutig. <P>Also:<P>(C, hab keine Lust das Beispiel aus dem Buch "Programmieren in C" nach JS zu transferieren, erklärs aber mit Kommentaren)<P><BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><HR><pre><BR>/*hashsize muss gesetzt werden:*/<BR>  const int hashsize=9999999; /*13 stellig<BR>                       geht nur mit UINT64*/<P>/*hash()<BR> *  params:<BR> *    in:<BR> *      s (char []): der zu Hashende String<BR> *    return:<BR> *      (unsigned): der Hashkey als Zahl<BR> */<BR>unsigned int hash(char s[]) /*function mit <BR>                         return unsigned;<BR>                         Parameter char []*/<BR>{<BR>  unsigned hashval = 0; /*Variable hashval<BR>                     als unsigned := 0*/<BR>  int i = 0; /*i als int := 0*/<BR>  for (; s[i] != '';  i++) /*für jeden<BR>                            Buchstaben in s*/<BR>  {<BR>    hashval = (hashval * 31) + s[i]; /*setze<BR>                       den Ascii-Wert dran*/<BR>    return hashval % hashsize; /*klar*/<BR>  }<BR>}<BR></pre><HR></BLOCKQUOTE><P>unsigned int: eine Ganzzahlvariable ohne Vorzeichen, könnte auch (mit leichten Unterschieden, d.h. es können nicht so viele Keys sein, man muss den Absolutwert berechnen um gültige (Zahl-)Indizes zu bekommen<P>int: eine Ganzzahlvariable<P>char []: ein String, aber als Feld von Buchstaben (jeder Buchstabe gilt auch als Zahl seines Ascii-Codes, Buchstaben sind in ''s)<P>ein C-String wird immer mit '' terminiert (der letzte Buchstabe ist immer 0)<P>int sollte entsprechen viel Bits haben (d.h. int ersetzen durch INT64, unsigned int durch UINT64)

mfG whitehouse