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).