Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[PHP][Ascii] Jak zamienić znak na kod ascii za pomocą php

# 30 Maj 2010 18:57 8988 5
  • #1 30 Maj 2010 18:57
    #
    Poziom 13  

    Witam!
    Potrzebuję pomocy przy zmianie znaku na odpowiadający mu numer w kodzie ASCII. Problem polega na tym że zmienne w PHP nie mają typów i gdy próbuję napisać algorytm tak jak w C++ nic z tego nie wychodzi.
    Oto mój kod:

    Cytat:

    <?php

    function szyfruj ($ciag)
    {
    $liczba = 0;
    $liczba = $ciag[0];
    return $liczba;
    }

    echo szyfruj("slowo");

    ?>

    Jak wyżej widać próbowałem sprawić żeby zmienna "liczba" była zmienną liczbową poprzez przypisanie jej zera. Algorytm jednak nie działa i zamiast kodu otrzymuję literę. Pomożecie laikowi? :)

    0 5
  • #2 30 Maj 2010 19:15
    marcinj12
    Poziom 40  

    Musisz użyć funkcji ord() dla zwrócenia kodu ascii [odwrotność chr()]
    Moim zdaniem tak to powinno wyglądać (dodałem spację dla rozdzielenia poszczególnych liter i rozbiłem wyraz na tablicę znaków przed główną pętlą):

    Code:

    <?php

    function szyfruj ($ciag)
    {
    $wynik = "";

    $tablica = str_split($ciag);

    foreach($tablica as $znak)
    {
       $wynik .= ord($znak)." ";
    }
    unset($znak);

    return $wynik;
    }

    echo szyfruj("slowo");

    ?>


    PS. Jest też funkcja bin2hex($ciag); która od razu dekoduje cały wyraz na znaki ASCII, ale w hexie.

    0
  • #3 30 Maj 2010 19:17
    adamz74
    Poziom 31  

    Funkcja ord().

    Pozdr!

    0
  • #4 30 Maj 2010 19:34
    #
    Poziom 13  

    Bardzo dziękuję, problem prawie rozwiązany. Jak przeczytałem w manual'u ord() zwraca integer z tym że przy operacjach matematycznych zachowuje się jak char. Np dla pierwszej literw w kodzie poniżej zamiast 98 wyświetla 971. Co robię źle?

    Cytat:

    <?php

    function szyfruj ($ciag)
    {
    $wynik = "";
    $z = 0;

    $tablica = str_split($ciag);

    foreach($tablica as $znak)
    {
    $z = ord($znak);
    $z .= 1;
    $wynik .= $z . " ";
    }
    unset($znak);

    return $wynik;
    }

    echo szyfruj("abcd");

    ?>

    0
  • #5 30 Maj 2010 20:06
    marcinj12
    Poziom 40  

    A gdzie wyczytałeś że kod ASCII litery a to 98? Mała litera a ma kod 97:
    Link
    A jedynki na końcu sam sobie doklejasz poleceniem $z .= 1;
    ...
    chyba że źle Cię zrozumiałem i chodziło Ci o coś takiego?
    $z += 1;

    0
  • #6 02 Lip 2010 11:27
    #
    Poziom 13  

    Dzięki marcinj12. Używałem złego operatora do dodawania liczb.
    Zamykam.

    0