ja klar! 😀
Strings in p44script sind binary-tauglich, können also auch 0-Zeichen enthalten (nicht wie die null-terminierten C-Strings). Also kannst Du mit send solche strings auch senden.
Dein C-Beispiel könnte in p44script so geschrieben werden:
var channel = 3
var sock = tcpsocket(g_qsync_ip, 9760)
try {
sock.connect()
var qsync_command = binary('1b 05 00 00 00', true)
qsync_command += chr(channel)
qsync_command += binary('04')
log("sende command: %s", hex(qsync_command))
sock.send(qsync_command)
}
catch as err {
log(4, "network: socket error: %s", err)
}
Zum Thema binary sind binary(), hex(), ord() und chr() nützlich, zudem auch substr zum Rauspflücken einzelner Bytes.
Wenn es um bit-level Operationen geht, suchen C-Gewohnte bitwise and/or/xor in p44script vergebens. Dafür gibt's die Funktionen bit(), setbit() und flipbit(), mit denen die für Binärprotokollen manchmal notwendigen Bitmanipulationen leichter realisert werden können.
Die Idee die ich damit verfolgt habe ist, dass eins in der C/C++ Praxis die bitwise Operatoren (inkl << und >>) eigentlich ausschliesslich zum Extrahieren und Einsetzen von Bits braucht. Deshalb bietet p44script genau dazu bequeme Funktionen, dafür keine bitwise and/or. Es fällt damit auch die in C fehlerträchtige Verwechslung von bitwise und logical weg (& vs. && - ist dasselbe in p44script).