c-string
spielmann
- php
Hi,
ich baue gerade ein alte CGI (in c) auf php um. Das CGI hat ein UDP Paket zu einem Server geschickt. Dieses soll jetzt direkt aus dem PHP passieren.
Problem ist ein c-string "char buffer[size];" wo mit hilfe eines Pointers daten geschrieben wurden. Geht soetwas auch mit php? Habe halt unterschiedliche typen. zb: shorts. Habe diese direkt geschrieben und den Pointer um size(short) verschoben. Danke für Eure hilfe!!
Gruss
jan
Hello,
ich baue gerade ein alte CGI (in c) auf php um. Das CGI hat ein UDP Paket zu einem Server geschickt. Dieses soll jetzt direkt aus dem PHP passieren.
Problem ist ein c-string "char buffer[size];" wo mit hilfe eines Pointers daten geschrieben wurden. Geht soetwas auch mit php? Habe halt unterschiedliche typen. zb: shorts. Habe diese direkt geschrieben und den Pointer um size(short) verschoben.
PHP kennt keine solchen generischen Datentypen. Es lässt auch den Zugriff auf den Speicher nicht dirket zu.
Die Typen, die man mit settype() festlegen kann, werden dann von PHP intern verwaltet und bei Bedarf auch automatisch ineinander umgewandelt, sofern das möglich ist.
http://de.php.net/manual/en/function.gettype.php
http://de.php.net/manual/en/function.settype.php
Typgerechte Daten direkt erzeugen zum Wegschreiben kannst Du mit der Funktion pack()
http://de.php.net/manual/en/function.pack.php
Sowohl in einem String als auch in einem (indizierten) Array kannst Du mittels des Index-Operators [] wandern.
Der "String" versteht sich dabei als Byte-Anreihung.
In einem Array kannst Du auch andere unterbringen
Mit array_fill() kannst Du solch ein Array "initialisieren".
http://de.php.net/manual/en/function.array-fill.php
Vielleicht helfen dir diese Betrachtungen etwas weiter.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
Sowohl in einem String als auch in einem (indizierten) Array kannst Du mittels des Index-Operators [] wandern.
Wobei das Wandern schnell zum Wundern werden könnte, wenn UTF-8 (oder eine andere Mehr-Byte-Zeichenkodierung) verwendet wird.
Der "String" versteht sich dabei als Byte-Anreihung.
Das deshalb unbedingt im Hinterkopf behalten, und Bytes nicht mit Zeichen verwechseln.
MfG ChrisB
Hi,
ich baue gerade ein alte CGI (in c) auf php um. Das CGI hat ein UDP Paket zu einem Server geschickt. Dieses soll jetzt direkt aus dem PHP passieren.
Problem ist ein c-string "char buffer[size];" wo mit hilfe eines Pointers daten geschrieben wurden. Geht soetwas auch mit php?
Was ist daran problematisch?
Wo werden die Daten denn hin „geschrieben”? Werden sie als Datenstrom über zuvor geöffneten UDP-Verbindung übertragen?
Das kann PHP auch - schau dir fsockopen & Co. an.
Habe halt unterschiedliche typen. zb: shorts. Habe diese direkt geschrieben und den Pointer um size(short) verschoben.
Wenn du mit PHP einfach einen Datenstrom ausgeben willst, dann brauchst du keinen Zeiger selber verschieben, sondern einfach nur „schreiben”.
Die Datentypen sind dabei so lange unproblematisch, so lange sie eine implizite toString-Methode haben, die eine sinnvolle Repräsentation als Textliteral liefert.
D.h., bei Arrays z.B. musst du also aufpassen - die direkt wegschreiben zu wollen, würde nur die Ausgabe „Array” erzeugen; als rekursiv durchlaufen, bis man dabei auf atomare Datentypen trifft, die sich als Textliteral darstellen lassen.
MfG ChrisB