Byte Array

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

  • Byte Array

    Hi

    Ich suche eine Funktion in PHP um einen Byte Array zu erstellen und diesen per Base64 noch zu encoden.

    In #C gibt es diese Funktion:
    Convert.ToBase64String(new byte[] {5, 7})

    Gibt es sowas auch in PHP oder kennt jemand ne möglichkeit dafür?

    Gruss und Danke

    Koda

  • #2
    Ist es so schwer im PHP-Manual nach "base64" zu suchen?

    PHP: base64_encode - Manual

    Kommentar


    • #3
      Guten Abend

      Das base64 ist nicht das Problem eher alles zusammen. Vorallem den byte Array zu erhalten ind diesen mit base64 zu encoden.

      Gruss

      Koda

      Kommentar


      • #4
        Zitat von Koda Beitrag anzeigen
        Das base64 ist nicht das Problem eher alles zusammen. Vorallem den byte Array zu erhalten ind diesen mit base64 zu encoden.
        PHP-Code:
        echo base64_encode("\x05\x07");
        // BQc= 
        Code:
        Console.WriteLine(Convert.ToBase64String(new byte[] { 5, 7 }));
        // BQc=
        Zuletzt geändert von h3ll; 02.07.2015, 22:00.

        Kommentar


        • #5
          Guten Abend

          Vielen Dank. Ist ein bytearray immer X und die Zahl mit führender 0 oder kann ich die mit php selber generieren?

          Gruss

          Koda

          Kommentar


          • #6
            PHP: chr - Manual
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Zitat von Koda Beitrag anzeigen
              Ist ein bytearray immer X und die Zahl mit führender 0 oder kann ich die mit php selber generieren?
              Nein.

              PHP-Code:
              $byteArray "Das hier ist ein Byte-Array".

              echo 
              "5. Byte: " ord($byteArray[4]); 

              Kommentar


              • #8
                Zitat von Koda Beitrag anzeigen
                Ich suche eine Funktion in PHP um einen Byte Array zu erstellen und diesen per Base64 noch zu encoden.
                Das sind zwei Aufgabenstellungen, die du getrennt betrachten solltest.

                In #C gibt es diese Funktion:
                Convert.ToBase64String(new byte[] {5, 7})

                Gibt es sowas auch in PHP oder kennt jemand ne möglichkeit dafür?
                Mit ein wenig Boilerplate könnte man zu so etwas kommen:
                PHP-Code:
                Convert::toBase64String(new Bytes([57])) 
                Dazu der Unterbau:
                PHP-Code:
                interface IConvertible {
                    function 
                __toString();
                }

                abstract class 
                Convert {
                    static function 
                toBase64String(IConvertible $bytes) {
                        return 
                base64_encode($bytes);
                    }
                }

                abstract class 
                ArrayOfInt implements IConvertible {
                // todo: implement ArrayAccess, Iterator, Countable

                    // limits
                    
                const minValue PHP_INT_MIN;
                    const 
                maxValue PHP_INT_MAX;

                    
                // properties
                    
                protected $ary null/// Array() of Int(minValue...maxValue)

                    
                protected function containsValidValuesOnly(Array $ary) {
                        foreach (
                $ary as $value) {
                            if (
                $value $this::minValue || $value $this::maxValue) {
                                return 
                false;
                            }
                        }
                        return 
                true;
                    }

                    function 
                __construct(Array $ary$check true) {
                        if (
                $check && !$this->containsValidValuesOnly($ary)) {
                            throw new 
                Exception('Invalid Value Error');
                        }
                        
                $this->ary $ary;
                    }

                    const 
                packformat 'C*'// UBYTE

                    // implement IConvertible

                    
                function __toString() {
                        
                $values $this->ary;
                        
                array_unshift($values$this::packformat);
                        return 
                call_user_func_array('pack'$values);
                    }
                }

                class 
                Bytes extends ArrayOfInt {
                    
                // limits
                    
                const minValue 0;
                    const 
                maxValue 255;
                    const 
                packformat 'C*'// UBYTE

                Eventuell etwas viel Umstand für wenig Ergebnis ...

                Zurück zu den zwei Problemstellungen:

                1.) Du möchtest mit Byte-Arrays arbeiten. PHP hat so eine Datenstruktur nicht (serienmäßig eingebaut). Wir haben Arrays, eine Art eierlegende Wollmilchsau. Eine Datenstruktur die von allem etwas (aber nichts richtig) kann. Arrays in PHP dienen als:
                * Assoziative Arrays (Mapping, Dictionary, ...)
                * Listen (Felder, C-like Arrays, ...)

                Der Datentyp, den ein PHP-Array simuliert, wird quasi durch die Funktionen und Operatoren bestimmt, die du auf das Array anwendest.

                1a.) Wie h3ll schon angemerkt hat, kann man Byte-Arrays in PHP auch mit Strings simulieren. Derzeit sind PHP-Strings einfach Speicherbereiche, auf deren Byte-Positionen man mit der []-Operation zugreifen kann. Quelle und Ziel dieser Operationen sind aber immer PHP-Strings (mit der Länge 1 Byte). Wenn du gewohnt bist, mit Ganzzahl-Typen (UBYTE, UCHAR e.t.c.) zu arbeiten, musst du zusätzlich chr() und ord() für Einzel-Bytes benutzen. Für das Konvertieren ganzer Arrays gibts entsprechend pack() und unpack(). Beide Funktionen sind allerdings mit einigen Stolperfallen versehen.

                2.) Fürs Base64-Encoding hat PHP base64_encode() in seiner Standard-Library. Allerdings stellt sich die Frage, worauf in deiner Anwendung der Fokus liegt:
                * auf dem Arbeiten mit Byte-Arrays, wie du es von C# gewohnt bist,
                * oder auf dem Konvertieren von Byte-Arrays?
                Im letzteren Fall fährst du mit PHP-Strings besser.

                Prinzipiell kann man von PHP aus über die COM-Erweiterung auch Objekte aus .NET-Assemblies erzeugen und benutzen. Allerdings funktioniert das nicht mit Klassen die ausschließlich "statische" Methoden besitzen (wie "Console" und "Convert"), nur mit Methoden, die als "COM visible" deklariert wurden und nur mit "echten" Objekten (nicht mit "structs"). Ob es mit dem Equivalent zu "byte[]" klappt, weiß ich nicht.
                Zuletzt geändert von fireweasel; 05.07.2015, 13:54.
                Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                Kommentar


                • #9
                  Guten Abend

                  Vielen Dank an alle. Ich werde mir das alles mal anschauen. Denke da finde ich meine Lösung

                  Gruss

                  Koda

                  Kommentar

                  Lädt...
                  X