Перейти к содержанию
    

Трансляция строки из указателя в массив

Здравствуйте!

 

Не могу разобраться с одним моментом.

Есть необходимость передавать с одного интерфейса в другой строковые команды, например "accd123,345,*11\r\n"(без ковычек)

Проблема возникает с последними символами конца и перевода строки \r\n. При приеме я их распознаю и заканчиваю прием. Прием делаю посредствам char *.

Далее я их передаю другому указателю и фактически передаю только accd123,345,*11. \r\n заканчивают и переводят строку. когда как мне нужно передать их как символы строки.

Я попытался посредством передачи принимаемых данных в массив добавить mas[max] = ''\0'

Но что-то не выходит. При этом когда я просто передаю строковую команду самостоятельно(без ее приема) вот так  mas[] = "accd123,345,*11\r\n", то все ок.

Прошу подсказать как правильно форматировать(в процессе буферизации)в этом случае прием чтобы передать строку такой как она пришла

 

Спасибо!

.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, addi II сказал:

когда как мне нужно передать их как символы строки.

не очень понятно требование, эти символы имеют коды 0x0D - \r возврат каретки и 0x0A - \n перевод строки, именно так они передаются в виде однобайтовой величины, отобразить их можно либо в виде этого значения именно как числа, либо в виде самих действий возврата каретки и переноса строки, что и делают терминалы, воспринимающие данные как строки, т.е. символов на экране не появится, но положение курсора изменится

7 часов назад, addi II сказал:

При этом когда я просто передаю строковую команду самостоятельно(без ее приема) вот так  mas[] = "accd123,345,*11\r\n", то все ок.

предположу, что "все ок", это на терминале выводится указанная строка, если перевести ее в hex, то причинные символы \r и \n будут отображаться двумя байтами каждый, т.е. символ слеша '\' это 0x5C и символ 'r' это 0x72  или 'n' это 0x6E.

Т.е. чтобы у вас на терминале отобразить управляющие символы в виде строковых значений, вам нужно заменить один байт управляющего символа на два байта его строкового отображения, например для \r, заменить 0x0D на 0x5C и 0x72

Изменено пользователем heavyC1oud

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 часов назад, addi II сказал:

Не могу разобраться с одним моментом.

Лучше выкладывайте кусок кода, который, по-Вашему мнению, должен работать, но не работает. Эскейп-последовательности - это такие же символы, как, например, символы букв и цифр. Они имеют свои коды в таблице ASCII. Но для консолей принято соглашение, что экскейп-последовательности выводятся не символьно, а совершают какие-то действия, например, '\n' переводит курсор на новую строку, '\r' - возвращает каретку в начало строки. Если, как уже отметил @heavyC1oud, прямо из консоли печатается строка "accd123,345,*11\r\n", то Вы примете все символы, включая '\', 'r', '\', 'n', '\0' в конце. Для консоли достаточно ввести "accd123,345,*11" и нажать Enter, хотя в некоторых можно настроить, что отправлять по Enter (LR, CR, LR + CR).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...