Я бы использовал struct.pack для подготовки строки байтов для отправки из данных, которые вы хотите отправить. Обязательно начинайте формат упаковки с >
, что означает, что вы хотите упорядочить по старому порядку и стандартным размерам, поскольку они так четко это документируют!
Итак (я не знаю, что означает «необязательный» для ключа доступа, я предполагаю, что это означает, что поле может содержать все нулевые байты, если у вас нет ключа доступа), если «данные» уже строка байтов и «команда», например, маленькое целое число без знака, что-то вроде ...:
def stringfor(command, data, accesskey='\0'*6, tid=1):
length = 16 + len(data)
prefix = struct.pack('>BBIBB6s', 6, 2, length, tid, command, accesskey)
checksum = sum(ord(c) for c in prefix) &0xFF
return prefix + chr(checksum) + chr(3)