pack/unpack - ich raffe es einfach nicht..

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

  • pack/unpack - ich raffe es einfach nicht..

    Hallo, kennt jmd. evtl. gute Tuts zum Handhaben von Binaerstreams?

    Ich habe folgendes...

    PHP-Code:
    <?php

    print $binarydata pack ("nvc*"0x12340x56786566);

    print_r unpack "C*"$binarydata ) );


    ?>
    eigtl. wollte ich im letzten Schritt ein Array mit 12 34 78 65 etc. ausgeben lassen.. was mache ich falsch?
    ich habe das C genommen, weil 8 Bit fuer mich logisch klingen. die doku auf php.net zu dem Thema ist ja nicht gerade zum Dahinschmelzen..
    Zuletzt geändert von uschi; 26.06.2006, 16:15.

  • #2
    das Forum hier auch nicht ... ich hatte damals gefragt, ob mir überhaupt irgendwer erklären kann, was das ist und was das machst, aber die Antworten waren sehr beschränkt ^^,

    *such*
    hier
    http://www.php-resource.de/forum/sho...threadid=52821

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Pack ist meist unnötig!

      Also, was willst du ?
      Wir werden alle sterben

      Kommentar


      • #4
        Naja die Antwort in dem früheren Thread, pack() sei ein rudimentäres Kompressionstool, ist eher irreführend als korrekt.

        Ein Beispiel:

        In PHP wird durch
        PHP-Code:
        $i 1
        ein der Plattform entsprechender signed integer Wert erzeugt.
        Der Einfachheit halber lassen wir mal einige Details wie signed/unsigned, byte order und Zweierkomplement weg und gehen von einer 16-Bit-Architektur aus. Dann sieht $i im Speicher so aus: 0000000000000001.

        Möchte man nun zum Beispiel ein ZIP-File on the fly mit PHP erzeugen, muß dieses laut Spezifikation manchmal unsigned long integers enthalten.

        In C oder C++ könnte man einfach
        PHP-Code:
        unsigned long int x 1
        sagen oder casten und hätte, was man braucht. Das geht in PHP aber so nicht, es gibt keine direkte Möglichkeit, eine Variable unsigned zu machen.

        Dazu gibt es pack()!
        PHP-Code:
        $i pack('V'1); 
        und schon ist $i der gewünschte unsigned long int.

        In diesem Beispiel ist pack() also kein Kompressor, denn es hat den Speicherbedarf verdoppelt.
        Natürlich gehts auch anders, man kann aus einem int oder float/double auch ein char machen und so quasi komprimieren. Aber dafür wurde pack() nicht ersonnen.

        Die Funktion muß meist da herhalten, wo man mit PHP etwas "hardwarenah" oder protokollspezifisch programmiert.

        Dass die Doku nicht so ausführlich ist, führe ich darauf zurück, dass mit PHP in der Regel eben nicht so programmiert wird. Folglich gibt es nur wenige Comments dazu (verglichen mit dem halben Buch, dass man zu date() lesen kann).

        @combie: Soll das ein Argument sein? Manche versuchen die Sprache vollständig zu lernen oder treffen auf die Funktion, weil sie noch nicht wissen was sie macht und evtl. die Lösung des aktuellen Problems sein könnte. Das sind Argumente!
        Zuletzt geändert von onemorenerd; 27.06.2006, 00:37.

        Kommentar


        • #5
          @combie: Soll das ein Argument sein? Manche versuchen die Sprache vollständig zu lernen oder treffen auf die Funktion, weil sie noch nicht wissen was sie macht und evtl. die Lösung des aktuellen Problems sein könnte. Das sind Argumente!
          Nagut, für irgendwas kann es wichtig und richtig sein!
          Aber für was?

          Nach langen Jahren PHP Progging, kann ich den Sinn nicht erkennen....
          (mag eine meiner persönlichen Beschränkungen sein)
          Zuletzt geändert von combie; 27.06.2006, 01:27.
          Wir werden alle sterben

          Kommentar


          • #6
            Original geschrieben von combie
            Aber für was?
            schonmal ne eigene zipclass geschrieben?
            MfG
            aim
            Lies mich jetzt!
            - OT-Tags-Liebhaber und BB-Code-Einrücker -

            Kommentar


            • #7
              OffTopic:

              Nein!
              Habe ich auch nicht vor. Eigendlich neige ich nicht so
              doll dazu, das Rad öfter neu zu erfinden, weil, runder
              wirds davon meist nicht.


              Pack ist meist unnötig!

              Also, was willst du ?
              Wegen diesem Spruch bin ich jetzt unter Rechtfertigungs-Druck?

              Die Frage hätte ich evtl etwas besser formulieren sollen...
              z.B.
              Was möchtest du mit dieser Funktion erreichen?
              oder:
              Binaerstreams, was möchtest du damit anstellen?

              Keinesfalls wollte ich irgendjemanden angreifen oder
              unhöflich sein. Ich habe aus der Eingangsfrage nicht
              entnehmen können, wozu das dienen soll. Darum
              habe ich nachgefragt. Sollte das als Attake
              wahrgenommen worden sein, bitte ich hiermit um
              Verzeihung und gelobe Besserung.



              Wir werden alle sterben

              Kommentar


              • #8
                Original geschrieben von combie
                Nein!Habe ich auch nicht vor. Eigendlich neige ich nicht so doll dazu, das Rad öfter neu zu erfinden, weil, runder wirds davon meist nicht.
                das war nur ein beispiel, denn für genau sowas braucht man dann z.b. pack - irgendjemand muss "das rad" ja erfinden :P
                MfG
                aim
                Lies mich jetzt!
                - OT-Tags-Liebhaber und BB-Code-Einrücker -

                Kommentar

                Lädt...
                X