В случае программного управления потоком данных мы используем стандартные символы xon и xoff (0x11 и 0x13) для приостановки и возобновления передачи. Но если мы хотим отправить двоичные данные, содержащие символы, совпадающие со значением ascii xon и xoff, какой набор символов мы должны использовать для отправки xon или xoff?
Как отправить xon/xoff в случае бинарных данных?
Ответы (3)
Простое решение - использовать кодировку base64, которая у вас есть в python.
base64.b64encode(yourData) - encode
base64.b64decode(yourData) - decode,
это добавляет дополнительные накладные расходы, но отправляемые данные находятся в простом символьном формате. даже HDLC использовал base64, так что, я полагаю, это будет один из вариантов для вас.
Использование программного квитирования исключает отправку двоичных данных.
Если не считать чего-то эзотерического (отправка 9 бит/байт вместо 8 — очень нестандартно), нет никакой разницы между 2 из 256 различных двоичных данных и 2 кодами, выбранными для использования в качестве XON/XOFF.
Существуют различные протоколы, которые пытаются справиться с этим. Все они кодируют «двоичные данные» во что-то эффективное, но не однозначное отображение. Можно использовать escape-коды, сжатие, пакеты данных и т. д. Конечно, оба конца связи должны знать, как кодировать/декодировать. Это часто ограничивает ваш выбор. Если вы сомневаетесь, начните с преобразования двоичного кода в текст, так как его легче отлаживать. http://en.wikipedia.org/wiki/Binary-to-text_encoding
Чтобы иметь возможность использовать эти два специальных символа в качестве управляющих, вы должны убедиться, что они не встречаются в данных полезной нагрузки. Один из способов сделать это — закодировать полезную нагрузку с помощью сокращенного алфавита, не включающего специальные символы. Кодировки двоичного кода в текст, упомянутые в параллельном ответе, выполнят эту работу, но если критичны низкие накладные расходы, не зависящие от распределения входных байтов, то escapeless.
escape
(чтобы данные, которые соответствуют XON и XOFF, можно было экранировать или закодировать). - person sawdust   schedule 25.10.2013