Я разрабатываю протокол UART на основе кодировки ASCII. Связь осуществляется между ПК и платой STM32. Формат пакета такой: Пакет: {STX,DATA,ETX} Где STX и ETX 0x02
и Ox03
в ASCII.
Пример:
STX HELLO ETX в шестнадцатеричном формате: 0x02 0x48 0x45 0x4c 0x4c 0x4f 0x03
Мой вопрос: где именно находится позиция \0
символа в моем пакете? это после ETX так: STX HELLO ETX \0 или после HELLO так: STX HELLO\0 ETX ?
Вы указываете свой формат пакета как {STX, DATA, ETX}.
Все содержимое DATA пакета содержится в поле DATA между STX и ETX.
Если вы решите отправлять в своих пакетах строки с завершением NUL, тогда NUL является частью строки — частью вашего поля DATA.
Таким образом, вы должны отправить: STX HELLO\0 ETX
это зависит от ДАННЫХ (слово «ПРИВЕТ» в вашем примере):
--если это строка с завершающим нулем (C-строка), в которой строка представлена массивом символов, оканчивающихся нулевым символом '\0',
или:
--if это "нормальный" массив символов.
поэтому пакет может быть:
-- STX HELLO\0 ETX для массива символов с завершающим нулем: [ 0x02 0x48 0x45 0x4c 0x4c 0x4f 0x00 0x03 ]
или:
-- STX HELLO ETX для обычного массива символов: [ 0x02 0x48 0x45 0x4c 0x4c 0x4f 0x03 ]
или:
--нулевой символ может быть где угодно в пакете!... это ваш протокол, как прокомментировал colin-s;
Колин
\0
если вы всегда заканчиваетеETX
?Крис Стрэттон