mikrocontroller.net

Forum: PC-Programmierung PHP - Hexadezimale Werte an fwrite()


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Ich bin daran, mir ein php Skript zu schreiben, das von einer externen 
Hardware im Netzwerk Daten abfragen sollte.
Dazu muss ich ein Anforderungstelegramm schicken, doch das besteht aus 
Hexadezimalen Werten.
z.B.
62:01:03:01:00:45:54:00

Was gäbe es für Möglichkeiten, diesen Befehl einigermassen sauber an 
fwrite() zu übergeben?

Grüsse Alex

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, mit fsockopen() http://www.php.net/manual/de/function.fsockopen.php 
eine "Datei" (also Netzwerkverbindung) öffnen und mit fwrite() 
http://php.net/manual/de/function.fwrite.php die gewünsche Zeichenkette 
schreiben?

Die Links enthalten bereits passable Codebeispiele, oder was fehlt Dir?

Nebenbei bemerkt, es wäre schön wenn man hier im Forum vernünftiger 
verlinken könnte - wozu immer die komplette Adresse anzeigen, das 
braucht doch kein Mensch ;-)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir scheint, dem Threadstarter geht es eher darum, wie in PHP ein 
derartiger String erzeugt werden kann, um dann an fwrite übergeben zu 
werden.

PHP kennt viele von C her bekannte Funktionen, so auch das ehrwürdige 
printf.

http://www.selfphp.de/funktionsreferenz/string_fun...


  $a = 254;
  $b = 64;
  $c = 128;

  $text = printf("%02x:%02x:%02x", $a, $b, $c);

ergibt

  fe:40:80

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die bisherigen Antworten!
Doch ich muss nicht einfach die Hexwerte als String aneinandergereit 
übergeben ("6201030100455400"), sondert der Wert dieser Hexzeichen, was 
als String etwas wie: "b....ET." ergeben würde...
Doch diese 00, 01 und 03 kann man ja nicht einfach als String 
darstellen.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, ich habe es jetzt mal mit:

>$befehl = sprintf('%c%c%c%c%c%c%c%c', 98,1,3,1,0,69,84,0);
>fwrite($fs, $befehl);
>$ans = fread($fs, 11);
>echo $ans;
(Am Anfang natürlich noch der Verbindungsaufbau, welcher ohne Fehler 
geht)
Nach langem warten bekomme ich eine leere Seite zurück... Liegt das noch 
an meinem Befehl oder sollte das jetzt eigentlich richtig funktionieren?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, nochmal ich. Es hat jetzt funktioniert mit:
>sprintf('%c%c%c%c%c%c%c%c', 98,1,3,1,0,69,84,0);
. Ich hatte noch den falschen Port.
Danke nochmal für die Antworten und den Ansatz mit sprintf!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.