я юзаю один уникальный символ как стартовый + синхронизирующий. до того обсуждения юзал 0xFF (все единицы, потом гарантированно один стоповый бит вставляется аппаратно - есть за что зацепиться). сейчас понял, что нужно его изменить на биточередующийся, например 0xAA - будет надежней. Но не суть.
Идея в том, что стартовый байт - уникальный, в теле пакета встретиться не имеет права. А как это обеспечить, если бинарные данные? А тогда вводим еще один, другой, служебный символ. Если в теле пакета встретился совпадач со стартовым, то он заменяется на пару служебный + любой другой. Если встретился совпадающий со служебным - то шлется два служебных. Примерно как сделано форматирование с обработке строк в си: '\0' = 0x00, '\\' = \
Понял, у тебя не бывает в посылках повторения первого символа. Если он появляется, ты помечаешь, что символ подменен и с стороны сервера это дешифруешь.