Prüfsumme ermitteln (Umsetzung von C in PHP)

Hallo zusammen,
in Ermangelung eines „ZW_DimUp“ und „ZW_DimDown“ Befehls möchte ich die Befehle als Hex-Code zum Dimmer senden. Wenn ich bekannte Codes kopiere und an den Dimmer sende funktioniert alles schon sehr gut, allerdings wenn ich eigene Codes generiere, dann muss ich auch die Prüfsumme ermitteln. Wie das geht, ist hier sehr gut in „C“ beschrieben.

Ich habe das nun wie folgt in IPS umgesetzt:

$data = array (0x01, 0x0A, 0x00, 0x13, 0x2A, 0x03, 0x26, 0x01, 0x0A, 0x05, 0x2A);
printf("0x%02x ", GenerateChecksum($data));

function GenerateChecksum($data)
{
	$ret = $data[1];
    for ($i = 2 ; $i < count($data) ; $i++){
        $ret ^= $data[$i];
    }
    return $ret;
}

Leider kommt als Ergebnis nicht wie erwartet 0x81 heraus, sondern 0x32.
Was mache ich falsch? Wer kann helfen?

Viele Grüße
Jürgen

Habe den Fehler gefunden. Richtig muss es heißen:

	$string = "01 09 00 13 2a 03 26 04 ff 2a"; 
	$hex = explode(" ",$string);

	foreach($hex as $code){
		$data[]=hexdec($code);
	}
	$fcs = GenerateChecksum($data);
	echo dechex($fcs);
 

	function GenerateChecksum($data)
	{
		$ret = $data[1];
	    for ($i = 2 ; $i < count($data) ; $i++){
	        $ret ^= $data[$i];
	    }
	    return 255 - $ret;
	}

Viele Grüße
Jürgen

Das erste Script hat mit den neuen Daten aber fast zum selben Ergebnis geführt. Lediglich die Negation am Ende hat gefehlt.

Das stimmt, den Rest habe ich aus anderen Gründen umgestellt.
Vielen Dank
Jürgen