Mã này:In chuỗi mà không cần thoát nhân vật
void Controller::write(const std::string& str) {
std::cout << "Writing: [" << str << "] to board." << std::endl;
s.write(str);
mất một string
và đẩy nó qua một liên kết nối tiếp với một vi điều khiển. (Điều này làm việc tốt). Tuy nhiên, khi tôi cố gắng đẩy một như thế này: write("ats203?\r")
, giao diện điều khiển đầu ra trông như thế này:
] to board.ts203?
Vì vậy, các Writing: [a
bị ghi đè bởi ] to board.
sau std::cout
gặp các \r
trong chuỗi.
Làm cách nào để in chuỗi dưới dạng một chuỗi ký tự thay vì xuất ra bàn điều khiển xén khi gặp phải ký tự thoát?
EDIT: Để làm rõ.
I muốn chuỗi của tôi là ats203?\r
. Điều này là do vi điều khiển được điều khiển bằng phiên bản được sửa đổi đôi chút của AT command và không chấp nhận lệnh cho đến khi nó đọc một số \r
. Khi chuỗi được đẩy vào bộ vi điều khiển, nó đọc số \r
dưới dạng dấu xuống dòng và hành động theo thứ mà nó đọc trước số \r
.
Điều tôi muốn là hiển thị chuỗi mà tôi đã tạo. Có một loạt các lệnh khác ở nơi khác được tạo tùy thuộc vào các cờ được đặt ở thời gian chạy. Vì vậy, tôi kết thúc với chuỗi trông giống như ate1\ratv0\rat+OSA=7\rat+OSX=255\r
.
Tôi muốn xem những gì tôi đã xây dựng và những gì tôi đang thúc đẩy. Tôi không thể làm điều này, bởi vì std::cout
đọc trả lại vận chuyển, hành động trên nó, và mangles đầu ra giao diện điều khiển của tôi.
EDIT: Làm rõ, một lần nữa: Tôi muốn std::cout << "Writing: [" << str << "] to board." << std::endl;
để sản xuất (khi str
là ats203?\r
):
Writing: [ats203?\r] to board.
Bạn có thể thoát khỏi nhân vật chạy thoát, vì vậy '\\ r' sẽ rời khỏi chuỗi như một chữ ' "\ r"'. ..không chắc chắn nếu đó là những gì bạn muốn hay không. – prelic
Tôi không hiểu, tại sao có một '\ r' trong chuỗi của bạn ngay từ đầu? Bạn muốn xuất kết quả nào? –
'\ r' là ký tự trả về dấu - nó sẽ làm cho" con trỏ "nhảy trở lại đầu dòng. Có lẽ bạn muốn ký tự dòng mới, '\ n'? – jrok