Этот код:печати строка без вылетающих символов
void Controller::write(const std::string& str) {
std::cout << "Writing: [" << str << "] to board." << std::endl;
s.write(str);
принимает string
и толкает его через последовательный канал связи с микроконтроллером. (Это прекрасно работает). Однако, когда я пытаюсь нажать, как это: write("ats203?\r")
вывод консоли выглядит следующим образом:
] to board.ts203?
Writing: [a
Так перезаписывается самая ] to board.
после std::cout
встречает \r
в строке.
Как напечатать строку как кучу символов, а не выводить консольный вывод, когда встречный символ встречается?
EDIT: уточнить.
I хочу моя строка должна быть ats203?\r
. Это связано с тем, что микроконтроллер управляется с использованием слегка модифицированной версии AT command, а не принимает команду до тех пор, пока она не прочитает. Когда строка помещается в микроконтроллер, она считывает \r
в качестве возврата каретки и действует на вещи, которые она считывает до \r
.
Я хочу показать строку, которую я построил. Существует множество других команд в другом месте, которые создаются в зависимости от флагов, установленных во время выполнения. Поэтому я получаю строки, которые выглядят примерно как ate1\ratv0\rat+OSA=7\rat+OSX=255\r
.
Я хотел бы посмотреть, что я построил и что я нажимаю. Я не могу этого сделать, потому что std::cout
читает возврат каретки, воздействует на него и управляет выходом моей консоли.
EDIT: Разъяснения, снова: Я хочу std::cout << "Writing: [" << str << "] to board." << std::endl;
производить (при str
является ats203?\r
):
Writing: [ats203?\r] to board.
Вы можете избежать экранирующего символа, поэтому '\\ r' оставит строку как литерал' "\ г" '. .. не уверен, что это то, чего вы хотите или нет. – prelic
Я не понимаю, почему в вашей строке есть '\ r'? Что бы вы хотели вывести вместо этого? –
'\ r' - символ возврата каретки - он заставит« курсор »вернуться к началу строки. Возможно, вам нужен символ новой строки, '\ n'? – jrok