questo codice:stringa di stampa senza caratteri fuga
void Controller::write(const std::string& str) {
std::cout << "Writing: [" << str << "] to board." << std::endl;
s.write(str);
prende un string
e lo spinge su un collegamento seriale ad un microcontrollore. (Funziona bene). Tuttavia, quando provo a spingere un così: write("ats203?\r")
, l'uscita della console è simile al seguente:
] to board.ts203?
Così il Writing: [a
viene sovrascritta dal ] to board.
dopo std::cout
incontra la \r
nella stringa.
Come posso stampare la stringa come un gruppo di caratteri anziché l'output della console di mangling quando viene rilevato un carattere di escape?
MODIFICA: Per chiarire.
I voglio la mia stringa da ats203?\r
. Questo perché il microcontrollore viene controllato utilizzando una versione leggermente modificata di AT command e non accetta il comando finché non legge \r
. Quando la stringa viene trasferita al microcontrollore, legge \r
come ritorno a capo e agisce su elementi letti prima dello \r
.
Quello che voglio è visualizzare la stringa che ho costruito. C'è un sacco di altri comandi altrove che vengono creati in base ai flag impostati in fase di esecuzione. Quindi finisco con stringhe che assomigliano a ate1\ratv0\rat+OSA=7\rat+OSX=255\r
.
Mi piacerebbe vedere cosa ho costruito e cosa sto spingendo. Non posso farlo perché std::cout
legge il ritorno a capo, agisce su di esso e manipola l'output della mia console.
EDIT: Precisazione, ancora una volta: voglio std::cout << "Writing: [" << str << "] to board." << std::endl;
per produrre (quando str
è ats203?\r
):
Writing: [ats203?\r] to board.
Si può sfuggire il carattere di escape, quindi '\\ R' lascerà la stringa come un letterale' "\ r" '. ... non è sicuro se è quello che vuoi o no. – prelic
Non capisco, perché c'è un '\ r' nella stringa, in primo luogo? Cosa ti piacerebbe invece produrre? –
'\ r' è un carattere di ritorno a capo - farà" cursore "tornare all'inizio della riga. Forse volevi un carattere di nuova riga, '\ n'? – jrok