Probleme mit Umrechnung Hex to Dec

Hi Leute,

ich lese Daten über eine Schnittstelle aus. Die Daten sehen wie folgt aus:

$Data = "\x37\x45\x11\x01\x46\x00\xF0\x4D\xB0\x00\xC5\x5C\x01\x01\xFA\x61\x00\x00\xC8\x91\x35\x5B\x05\x71\x48\x6D\x60\x00\x03\x2F\x64\x01\x00\x10\x0C\x8D\x0C\x8D\x0C\x8B\x0C\x8C\x0C\x8B\x0C\x8B\x0C\x8E\x0C\x8E\x0C\x8F\x0C\x88\x0C\x89\x0C\x8D\x0C\x8E\x0C\x8D\x0C\x8D\x0C\x85\x04\x0B\xB0\x0B\xAD\x0B\xAE\x0B\xAD\x01\x0B\xB9\x01\x0B\xC1\x48\xD4\xF2\xA5\xE6\x78\x0D"; 

Jetzt möchte ich mir zum Beispiel zwei Blöcke auswerten:

print $test  = hexdec($Data[13].$Data[14]);

Hier bekomme ich allerdings folgende Fehlermeldung:

Abort Processing during Fatal-Error: Invalid characters passed for attempted conversion, these have been ignored

Das selbe Problem habe ich auch, wenn ich die Daten verkleinere, zum Beispiel so:

$test = "\x00\x00\xC8\x91";

Hier ist das Ergebnis normalerweise 51345, allerdings bekomme ich hier die gleiche Fehlermeldung.

Wie bekomme ich die Daten ausgewertet?

Du hast KEIN Hex-String, sondern einfach nur ein String mit Rohdaten (binärer String).
Somit ist hexdec die falsche Funktion.
Korrekt wäre unpack PHP: unpack - Manual
Michael

Hi Michael,
Danke für deine Hilfe. Soweit konnte ich alle Daten auslesen, allerdingt habe ich einen Wert wo ich nicht weiterkomme.

Ausgelesen wird FA 61. Ergebnis müßte -14390 sein. Der Wert ist laut Anleitung vom Typ signed.
Ich habe es mit der unpack Funktion probiert und allen „unpack Formatzeichen“ wie „s, S, n“ usw… Leider komme ich nicht auf das korrekte Ergebnis.

$current= unpack ("l*",$Data[14].$Data[15]);   //alle Formatzeichen l, s, S....probiert

Dann habe ich noch ein weiteres Problem. Mit folgenden Befehl lese ich die Temperatur aus.

$Cell_NTC1 = unpack ("n*",$Data[67].$Data[68]);

Der ausgelesene Wert muß jetzt noch mit 2731,5 subtrahiert und /10 geteilt werden.
Ich bekomme ums verrecken nicht die Formel zusammen, so das das Script korrekt ausgeführt wird.
Probiert habe ich folgendes.

$test = (($Cell_NTC1[1]-"2731,5")/10);

Hier kommt immer die Meldung:

Notice: A non well formed numeric value encountered in /mnt/data/symcon/scripts/29330.ips.php on line 115

$test = ($Cell_NTC11-2731)/10)

Nachtrag: bei

$current= unpack ("l*",
print_r($current);

Current ist ein Array und spuckt (je nach Formatqualifier) auch noch in unterschiedlichen Keys die Werte aus.

Ja, ist auch korrekt, weil du da einen String und keine Zahl benutzt.

$test = (($Cell_NTC1[1]-2731.5)/10);

Michael