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


von Alex (Gast)


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

von Mark B. (markbrandis)


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 ;-)

von Rufus Τ. F. (rufus) Benutzerseite


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_funktionen/printf.php


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

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

ergibt

  fe:40:80

von Alex (Gast)


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.

von Alex (Gast)


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?

von Alex (Gast)


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!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.