Жаргонное слово, которое вам нужно найти, это «сериализация».
Это интересная проблема, связанная с последовательным соединением, которая может иметь ограничения в отношении того, какие символы могут идти от конца к концу, и может быть не в состояниипередать также восемь битов на символ.
Ограничения на определенные коды символов довольно распространены.Вот некоторые из них:
Если используется программное управление потоком данных, то условно управляющие символы DC1 и DC3 (Ctrl-Q и Ctrl-S, также иногда называемые XON и XOFF)) не могут быть переданы как данные, поскольку они отправляются для запуска и остановки отправителя на другом конце кабеля.
На некоторых устройствах символы NUL и / или DEL (0x00 и 0x7F) может просто исчезнуть из FIFO получателя.
Если получателем является Unix tty, а режимы termio установлены неправильно, то символ Ctrl-D (EOT или 0x04) можетзаставить tty драйвер сигнализировать конец файла процессу, у которого открыт tty.
Последовательное соединение обычно настраивается для ширины байта и возможного включения бита четности.Некоторые соединения требуют использования 7-битного байта с четностью, а не 8-битного байта.Для подключения к (серьезно старому) устаревшему оборудованию даже возможно настроить много последовательных портов для 5-битного и 6-битного байтов.Если на байт доступно менее 8 битов, то для обработки двоичных данных требуется более сложный протокол.
ASCII85 - это популярный метод для работы как с 7-битными данными, так и с ограничениями на управляющие символы.Это соглашение для перезаписи двоичных данных с использованием только 85 тщательно отобранных кодов символов ASCII.
Кроме того, вам, безусловно, следует беспокоиться о порядке следования байтов между отправителем и получателем.Возможно, вам также придется беспокоиться о формате с плавающей запятой, поскольку не каждая система использует IEEE-754.
Суть в том, что достаточно часто выбор чистого протокола ASCII - лучший ответ.Он имеет преимущество в том, что его может понять человек, и гораздо более устойчив к проблемам с последовательным соединением.Если вы не отправляете кучу данных с плавающей запятой, неэффективность представления может перевесить из-за простоты реализации.
Просто будьте либеральными в том, что вы принимаете, и консервативными в том, что вы излучаете.