Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Zeichenfolge stück für stück abarbeiten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Zeichenfolge stück für stück abarbeiten

    Hallo,

    ich versuche gerade mit PHP folgendes:

    Gegeben ist ein Code (bsp. 4d7f7e6173846b7c6e-5a76797e7e6f82-4ccd97ca) jetzt möchte ich jede Zahl/Buchstabe einzeln mit einer for-Schleife durchlaufen. Anschließend jede Zahl (Buchstaben a,b,c,d,e,f werden umgewandelt in derren Hexadezimal Wert) durch 16 teilen.

    Klingt erstmal einfach, mit Java könnte ich das sicherlich auch ohne Hilfe. Doch bei PHP hab ich da aktuell ein paar schwierigkeiten.

    For-Schleife ist kein problem. Wie kann ich aber jeden Char einzeln ansprechen? "So ne art getnextchar" suche ich.

    PHP-Code:
    for($i=0$i=$key.length[B](?)[/B]; $i++) {
     
    anweisungen

    so mein Ansatz, ganz klassige For-Schleife.

    Ist das überhaupt sinnvoll mit PHP? Oder soll mans lieber via JAVA machen? Würd das aber mal gern via php probieren, damit ich weiß wie das hier funzt

    Danke und Gruß,

    Christian

  • #2
    Zitat von chr1s-eg Beitrag anzeigen
    Ist das überhaupt sinnvoll mit PHP? Oder soll mans lieber via JAVA machen? Würd das aber mal gern via php probieren, damit ich weiß wie das hier funzt
    Prinzipiell spricht nix dagegen, dass es sinnvoll ist. Aber mal ganz ehrlich, alle Funktionen die du dazu brauchst, kannst du per Google innerhalb von Sekunden herausfinden... $key.length ist absoluter Quatsch unter Berücksichtigung des PHP Syntax...

    Kommentar


    • #3
      Deshalb mein Fragezeichen, so hätte ich es in Java verwendet

      Kommentar


      • #4
        Ja, aber PHP ist kein Java...

        http://tinyurl.com/2559dns
        http://tinyurl.com/2b2y88l

        Kommentar


        • #5
          Ungetestet aber sollte gehen:

          PHP-Code:
          function convert($input) {
              
          $result '';
              
          $len strlen($input);
              for (
          $i 0$i $len$i += 2) {
                  
          $result .= chr(intval(substr($input$i2), 16));
              }
              return 
          $result;
          }

          $input '4d7f7e6173846b7c6e-5a76797e7e6f82-4ccd97ca';
          // Prüfung ob Bindestriche enthalten sind
          if (strstr($input'-') {
              
          $ar explode('-'$input);
              foreach(
          $ar as $val) {
                  echo 
          convert($var).'<br>';
              }
          } else {
              echo 
          convert($input);

          Kommentar


          • #6
            Zitat von CPCoder Beitrag anzeigen
            Ungetestet aber sollte gehen:

            PHP-Code:
            function convert($input) {
                
            $result '';
                
            $len strlen($input);
                for (
            $i 0$i $len$i += 2) {
                    
            $result .= chr(intval(substr($input$i2), 16));
                }
                return 
            $result;
            }

            $input '4d7f7e6173846b7c6e-5a76797e7e6f82-4ccd97ca';
            // Prüfung ob Bindestriche enthalten sind
            if (strstr($input'-') {
                
            $ar explode('-'$input);
                foreach(
            $ar as $val) {
                    echo 
            convert($var).'<br>';
                }
            } else {
                echo 
            convert($input);


            Danke! So habe ich schonmal einen Ansatz wie das ganze funktioniert. Was ich mich aber gerade Frage.. wieso wandelst du in dieser Zeile

            PHP-Code:
            $result .= chr(intval(substr($input$i2), 16)); 
            das resultat in chr (ascii) um? Da bekomm ich nur Bullshit raus. Ich hab das mal ohne Ascii gemacht. also

            PHP-Code:
            $result .= intval(substr($input$i2), 16); 
            Im unteren Teil des Codes entfernst du die Bindestriche mit explode. Ich müsste allerdings im Ergebnis ($result) diese wieder an die alte Stelle bringen. Die Buchstaben muss ich in HexZahlen umwandeln und durch 16 teilen.

            Kannst du mir da noch einen Tipp geben?

            Kommentar


            • #7
              anstatt das die zu exploden könntest du auch eine weiche für bindestriche einbauen. also sowas wie: wenn zeiche = "-" dann einfach "-" drucken und weiter mit nächstem.

              buchstaben wandelst du mit chr in eine hexzahl...
              was das intval da soll hab ich auch nicht so ganz verstanden.
              Under Construktion

              Kommentar


              • #8
                Zitat von Hu5eL Beitrag anzeigen
                buchstaben wandelst du mit chr in eine hexzahl...
                Hmm mit chr verwandelst du ein ASCII Code in einen Buchstaben. Mit ord verwandelst du einen Buchstaben in ASCII Code und hexdec bzw. dechex sind zum Verwandeln von Dezeimal<->Hexadezimal. Oder seh ich da was falsch?

                Kommentar


                • #9
                  du könntest recht haben xD sorry. Zu früh am morgen
                  Under Construktion

                  Kommentar


                  • #10
                    WTF? Da krempeln sich ja einem die Fußnägel hoch.

                    Der Zugriff auf die einzelnen Zeichen eines Strings erfolgt analog dem Array-Zugriff per Index.

                    $FirstChar = $String[0]; usw.

                    Kommentar


                    • #11
                      Guten Morgen,

                      dank eurer Hilfe konnte ich schon einen Teil fertig stellen.

                      Hier mal die aktuelle Version:

                      PHP-Code:
                      <?php

                      function convert($input) {
                          
                      $result '';
                          
                      $len strlen($input);

                          for (
                      $i 0$i $len$i++) {
                              if (
                      abs(substr($input$i1)) == '-') {
                                  
                      $result .= '-';
                                  echo 
                      "Minus gefunden <br />";
                              } else {
                                  
                      $result .= abs(substr($input$i1)-(($i+1)%16));
                                  echo 
                      "Berechne: ".substr($input$i1) ." mit "$i ." %16 <br />";
                              }
                          }

                          return 
                      $result;

                      }

                      $input '51838265-77886-4123';

                      // Prüfung ob Bindestriche enthalten sind
                      /*if (strstr($input, '-')) {
                          $ar = explode('-', $input);
                          foreach($ar as $var) {
                              echo convert($var).'<br>';
                          }
                      } else {
                          echo convert($input);    
                              
                      }  */

                      echo convert($input);    
                      ?>
                      Das wichtigste passiert hier:

                      PHP-Code:
                      $result .= abs(substr($input$i1)-(($i+1)%16)); 
                      Meine Ziel ist es jede Zahl im String $input mit dem Ergebnis aus i%16 zu subtrahieren. Das klappt soweit schonmal prima. Jetzt hänge ich aber noch an den Hexadezimalwerten. Es kann durchaus vorkommen das ein Input so aussieht:

                      PHP-Code:
                      $input='518b3826a5778f86'
                      Ein einfaches umwandeln der Werte in Hexadezimal ist kein Problem, allerdings muss bei der Rechnung folgendes beachtet werden:

                      Wenn für 'a' der Wert 10 rauskommt, muss die Formel auch mit 10 rechnen und nicht erst mit 1 und dann mit 0. Das würde passieren, wenn ich einfach den String komplett umwandel. Also müsste ich irgendwie in der for-Schleife oben prüfen ob der nächste Char a,b,c,d,e oder f ist. Falls ja umwandeln und damit rechnen, wenn nicht normal weiter machen.

                      Nur es hängt mal wieder am Code. Ich bekomm einfach kein sinnvollen Code dafür zustande. Ich arbeite erst seit ein paar Tagen mit PHP und hab da noch meine Probleme.

                      Wäre nett wenn mir jemand mal wieder einen kleinen Schubser in die richtige Richtung geben könnte.

                      Viele Grüße,

                      Christian

                      Kommentar


                      • #12
                        Hat sich erledigt. Habs hinbekommen.

                        Hier mal das Ergebnis:

                        PHP-Code:
                        <?php

                        function convert($input) {
                            
                        $result '';
                            
                        $len strlen($input);
                            
                        $temp '';

                            for (
                        $i 0$i $len$i++) {
                                if (
                        substr($input$i1) == '-') {
                                    
                        $result .= '-';
                                    
                        //echo "Minus gefunden <br />";
                                    //echo substr($input, $i, 1) ." bei position " .$i ."<br />";
                                
                        } else {
                                    
                        $temp substr($input$i1);
                                    
                        $temp hexdec($temp)-(($i+1)%16);
                                    
                        $result .= dechex(abs($temp));
                                    
                        //echo substr($input, $i, 1) ." bei position " .$i ."<br />";
                                

                            }
                            return (
                        $result);
                        }
                           
                        $input '4d7f7e6173846b7c6e--5a76797e7e6f82-4ccd97ca';
                        echo 
                        convert($input);

                        ?>
                        Danke für euere Hilfe!!!

                        Kommentar


                        • #13
                          if (substr($input, $i, 1) == '-') {

                          $temp = substr($input, $i, 1);
                          Doppelt gemoppelt.
                          $temp = hexdec($temp)-(($i+1)%16);
                          Sinn der Übung?
                          [COLOR="#F5F5FF"]--[/COLOR]
                          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                          [COLOR="#F5F5FF"]
                          --[/COLOR]

                          Kommentar

                          Lädt...
                          X