Это может быть слишком сложно для этого, но метод, который мне еще не удалось, - это SLIP, RFC 1055, версия 1988 года. В течение многих лет я использовал его, чтобы отобразить блоки данных в 7 или 8-битный поток ASCII для передачи по всем носителям, с которыми я столкнулся. Затем использовали обратную или некоторую его модификацию, чтобы преобразовать поток обратно в необходимую конфигурацию на другом конце. Примеры кода на C есть в RFC. Я всегда использовал предложение Фила Карна использовать один и тот же символ для начала и конца пакета.
Таким образом, для работы с потоком требуется только одна подпрограмма. Он поглощает символы до тех пор, пока не встретится SOP / EOP. Это было выбрано для борьбы с шумом, который может накапливаться на входе радиолиний, когда они бездействуют в ожидании данных. Фил говорит об этом в других работах.
Я обычно использую \ x0D или \ x0A, для которых когда-либо используется система, на которой работают средства отладки, в качестве возврата каретки, а в качестве escape-символа используется всегда популярная обратная косая черта '\'. Время от времени удобно использовать другой управляющий код или использовать различные значения для управляющих символов, чтобы уменьшить размер пакета. Использование системы as позволяет использовать терминальную программу с добавленным кодом для SLIP и несколькими модификациями для работы в качестве монитора и инструмента для ввода пакетов в поток вручную.
Я всегда обнаруживал, что у меня достаточно вариантов, если первый символ в пакете указывает параметры на другом конце. Конечно, должна быть обеспечена некоторая форма проверки ошибок и / или восстановления после ошибок и возможность повторной передачи пакета MUNGED. Для небольших пакетов данных, передаваемых по высоконадежным каналам связи, можно использовать простую контрольную сумму, или в случае передач с использованием трех минерализованных вулканов в качестве мест антенн, которые расположены немного дальше, чем хотелось бы, чтобы алгоритм коррекции ошибок Fowarad с высокой степенью избыточности находился у себя дома.
SLIP достаточно универсален, чтобы брать данные из 16-битной Motorola 68HC11 и восстанавливать их в 32-битной системе Intel, если программист меняет окончание и заботится о смещении между 16 и 32-битными данными.
Gordon
Гордон Кугер
Стиллуотер, хорошо