Registervariable Daten Zerlegen

Hallo,

ich hänge seit gestern an der Zerlegung eines Eingangsstrings HEX Länge 16 byte und benötige einmal etwas Input.

Der Eingabe sieht folgendermassen aus:

Ich habe es schon mit ord($data); versucht Aber damit bekommt man ja nur die Information von 1Byte.
Wie kann ich aus den Eingabe Länge 16 Byte 0-3 = Kennung und Byte 3-5 = Dezimale Zahl extraieren?
Als Ergebniss müsste für Zeile 1 = 15673379 (dez.) , Zeile 2 = 1234 (dez.) und Zeile 3 = 0 (dez.) herrauskommen.
Wer kann mir weiterhelfen?

Thomas

Hallo Thomas,

probier es mal so:

$result  = ord($_IPS['VALUE']{5}) + 256 * ord($_IPS['VALUE']{4}) + 65.536 * ord($_IPS['VALUE']{3}); 

Gruß
Attain

Hallo
Auf die Schnelle so:

	// String erstellen		
	$data = chr(165).chr(1).chr(26).chr(239).chr(40).chr(35);
		
	$d3 = ord($data[3]);
	$d4 = ord($data[4]);
	$d5 = ord($data[5]);
	
	$zahl    = ($d3*65536)+($d4*256)+($d5);
	
	echo "
Zahl:" . $zahl;

Suche in der PHP Doku und finde dort die Funktionen „substr“ zum zerlegen und „hexdec“ zum konvertieren

<?php
$DATA=array("A5011AEF2823","A5011A0004D2","A5011A000000");
foreach ($DATA as $line) {
    $kennung=substr($line,0,6);
    $wert=substr($line,6,6);
    $value=hexdec($wert);
    print "$wert,$value
";

}

Das array ist nur zur Demonstration, bei Dir kommen ja schon die Werte wie in $line

Tommi

Hallo,
es klappt. Danke für die Hilfe.

if ($_IPS['SENDER'] == "RegisterVariable") 
{
    // neu empfangene Daten lesen
    $data = $_IPS['VALUE'];

    $byte3=ord($data[3]);
    $byte4=ord($data[4]);
    $byte5=ord($data[5]);
    $code  = ($byte3*65536)+($byte4*256)+($byte5);
    //print_r($code);
    setvalue(51565,$code);
    
}

Schöne Pfingsten

Ergänzung:
Hexdec geht aber nicht mit binären Daten, sondern nur mit einem String welcher die hexadezimal Schreibweise enthält.

Anstatt mit ord funktioniert auch unpack.
Dies kann auch mit mehreren Bytes umgehen.
Michael