#.net #visual-c
#.net #visual-c
Вопрос:
Я использую метод String::Remove для удаления первых трех символов строки. Однако я получаю неожиданные результаты от метода.
При первом запуске моей функции она возвращает строку с удаленными первыми двумя символами. При следующем запуске моей функции она возвращает строку, в которой удален только первый символ.
Есть ли скрытые символы в строке? Если да, то как мне их увидеть / удалить?
String^ SendCommand(const String^ command)
{
lock l(thisLock);
serialPort->WriteLine((String^) command);
String^ response = serialPort->ReadLine();
if (response[1] == CMD_ERROR_CHAR)
{
// Unknown command was sent
}
response = response->Remove(0, 3);
return response;
}
Согласно отладчику:
Run1:
(предварительно удалить) ответ = «: 0 ДЕСЯТЫХ»
(после удаления) ответ = «0 ДЕСЯТЫХ» (без пробела перед 0)
Run2:
(предварительно удалить) response = «:A -725»
(после удаления) ответ = «-725» (пробел перед -)
ОТВЕТИТЬ:
Я понял это, наконец.
По-видимому, окно просмотра не будет намекать на escape-символы в строке. Вы не будете знать, что они существуют, если специально не проиндексируете символ.
В Run2 я просмотрел ответ [0] в окне просмотра и заметил символ ‘ n’. Несмотря на то, что ответ отображался как «:A -725″, на самом деле это был » n:A -725″.
Вызвало у меня больше проблем, чем должно было быть.
Комментарии:
1. Должен ли Run2 представлять неправильный сценарий вывода? Я спрашиваю только потому, что это кажется правильным, поскольку оно удаляет «: A»…
2. Run1 удаляет «:A» (с конечным пробелом). Запуск 2 удаляет только «:A». Извините, я поясню это более четко в сообщении.
3. Вы пробовали просматривать отдельные символы по индексу? в противном случае вы также могли бы применить TrimStart() к строке, просто для уверенности.
4. Я почти уверен, что удаляется какой-то неграфический символ. Я просто не знаю, как просматривать неграфические символы в окне просмотра Visual Studio.
5. Я допустил опечатку :). Изменил его со 2 на 3 после того, как я понял. Они считываются с последовательного порта.