CSCK_SendText Format

Hallo Zusammen,

ich habe ein Problem und hoffe mir kann jemand weiter helfen.
Aktuell versuche ich Daten über einen Client Sockel an ein anderes System zu übergeben.
Mein Problem ist der Aufbau des Strings den ich versenden möchte.
Der string muss wie folgt aufgebaut sein.

Ich muss die Länge des Strings (TDS) muss als HEX geschickt werden. Aktuell habe das wie folgt gelöst.

function send_camline ($id_comcell, $comm){

        $zeichen_anzahl = strlen($comm);                                            // zaehle Zeichen in Commando
        $zeichen_2 = $zeichen_anzahl+2;                                             // Anzahl der Zeichen in Commando PLUS 2 wegen Start und Endbefehl
        $zeichen_hex = dechex($zeichen_2);                                          // Gesamtzeichen in HEX umwandel  
        $zeichen_hex = chr($zeichen_2);                                             // Erzeugt eine Ein-Byte-Zeichenkette aus einer Zahl
        if ($zeichen_2 <= 255) {$tbd = "\x00\x00\x00";} 
            else {$tbd = "\x00\x00\x01";}
        $stx = chr(02);                                                             // Indication start des Befehles
        $end = chr(03);                                                             // Indication ende des Befehles
        $log = "Befehl an Comcell Versendet: $comm \n";
        $send = CSCK_SendText ($id_comcell,$tbd .$zeichen_hex .$stx .$comm .$end);  // Sende befehl an Comcell
        // Auswerten ob Befehl erfolgreich
        if ($send = true){$log .= "Befehl erfolgreich an Comcell gesendet \n";       
                          $error = 0;} 
                          else {
                          $log .= "Senden an Comcell Fehlerhaft \n";
                          $error = 0;}
        return $ret = array("log_text"  => $log,
                            "error"     => $error);
    }

Soweit Funktioniert das auch bis eine Zeichenlänge von 510 Zeichen.
Jetzt muss ich aber einen string schicken der länger als 510 Zeichen ist und die Lösung mit meiner If schleife sub optimal bzw. funktioniert nicht.
Die Frage ist wie kann ich eine dezimal die größer als 255 ist als zweistelligen HEX code versenden?

Ich hoffe ich konnte mein Problem verständlich machen und jemand hat eine Idee und kann mir weiterhelfen.
Gruß Stephan

Hier mal zum Testen:

$zeichen_anzahl =  510;
$len1 = $zeichen_anzahl & 0xFF;
//echo $len1." dechex: ".dechex($len1).PHP_EOL;
$len2 = ($zeichen_anzahl >> 8 )&0xFF;
//echo $len2." dechex: ".dechex($len2).PHP_EOL;
$zeichen_hex = "\x00\x00".chr($len2).chr($len1);
//echo $zeichen_hex;

mit:

$zeichen_anzahl = strlen($comm)+2; 

Entweder Pack oder auch z.b. mit binären Operanden wie Bitverschiebung.
https://www.php.net/manual/de/function.pack.php

$len1 = ($len & 0xff00) >> 8;
        $len2= $len & 0x00ff;

Michael

Vielen Dank für eure super schnelle Antwort.
Die Lösung von steppe funktioniert auf anhieb perfekt.

Vielen Dank .

Gruß Stephan