PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Byte Array (https://www.php-resource.de/forum/php-developer-forum/105128-byte-array.html)

Koda 02-07-2015 21:20

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

h3ll 02-07-2015 21:22

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

PHP: base64_encode - Manual

Koda 02-07-2015 21:38

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

h3ll 02-07-2015 21:57

Zitat:

Zitat von Koda (Beitrag 671198)
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=


Koda 03-07-2015 02:58

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

wahsaga 03-07-2015 10:02

PHP: chr - Manual

h3ll 03-07-2015 18:42

Zitat:

Zitat von Koda (Beitrag 671202)
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]); 


fireweasel 05-07-2015 13:43

Zitat:

Zitat von Koda (Beitrag 671195)
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.

Zitat:

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.

Koda 05-07-2015 21:12

Guten Abend

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

Gruss

Koda


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:49 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG