Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Konwersja tekstu na liczby
Forum PHP.pl > Forum > PHP
Gama101
Witam. Mam taką funkcję, którą wykorzystuję w jednej z gier - ma ona na celu zamianę tekstu wpisanego przez gracza na format liczbowy.

Kod
stock pass_hash(buf[])
{
new length = strlen(buf);
   new s1 = 1, s2 = 0;

   for(new n=0; n<length; n++)
   {
      s1 = (s1 + buf[n] + buf[n]) % 66666;
      s2 = (s2 + s1)     % 66666;
   }

   return (s2 << 16) + s1;
}


Próbowałem ją przerobić na PHP uzyskująć taki efekt

  1. <?php
  2. $s1 = 0;
  3. $s2 = 1;
  4. $buf = 'test';
  5. $dlugosc = strlen($buf);
  6. for( $x = 0; $x < $dlugosc; $x++ )
  7. $s1 = ($s1 + $buf[x] + $buf[x]) % 66666;
  8. $s2 = ($s2 + $s1) % 66666;
  9. $return = ($s2 << 66) + $s1;
  10. echo($return);
  11. ?>


Jednakże, funkcja ta nie działa i wypluwa dwa błędy

Kod
Notice: Use of undefined constant x - assumed 'x' in *:\*\*\*\*\logowanie.php on line 68

Warning: Illegal string offset 'x' in *:\*\*\*\*\logowanie.php on line 68


W jaki sposób mogę zrobić to tak, aby działało poprawnie? Wszelka pomoc mile widziana smile.gif
Turson
$buf[x] - zgubiłeś coś. Powinno być $buf[$x]
werdan
  1. $return = ($s2 << 66) + $s1;


Powinno być 16 jak wyzej.
Gama101
Błędy zniknęły i coś tam robi - jednak nie tak jak powinno sad.gif

dla pewnego ciągu znaków o długości 10 zamiast 787875935 wychodzi 65536
sazian
  1. $s1 = 0;
  2. $s2 = 1;
  3. $buf = 'test';
  4. $dlugosc = strlen($buf);
  5. for( $x = 0; $x < $dlugosc; $x++ )
  6. {
  7. $s1 = ($s1 + $buf[$x] + $buf[$x]) % 66666;
  8. $s2 = ($s2 + $s1) % 66666;
  9. $return = ($s2 << 16) + $s1;
  10. }
  11. echo($return);
  12.  
Gama101
Niestety, dalej to samo sad.gif
sazian
$s1 = ($s1 + ord($buf[$x])*2) % 66666;
Gama101
Jest o wiele lepiej, jednak to nadal nie jest to sad.gif Teraz wynikiem konwersji jest 787286110 a powinno być 787875935
Turson
Nie jesteśmy od poprawiania błędów w działaniach matematycznych...
Gama101
Przepraszam Cię bardzo, ale ten sam skrypt działa w dwócyh różnych miejscach na dwa różne sposoby. Jeśli nie masz chęci pomaganie, to nie zaglądaj do tego wątku.
sazian
  1. $s1 = 0;
  2. $s2 = 1;
  3. $buf = 'test';
  4. $dlugosc = strlen($buf);
  5. for( $x = 0; $x < $dlugosc; $x++ )
  6. {
  7. $s1 = ($s1 + $buf[$x] + $buf[$x]) % 66666;
  8. $s2 = ($s2 + $s1) % 66666;
  9. }
  10. $return = ($s2 << 16) + $s1;
  11. echo($return);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.