2016-01-09 5 views
1

Я пытаюсь заставить программу отвечать на определенные слова, отправленные микроконтроллером, но когда я сравниваю полученное слово с заранее определенным словом, он всегда возвращает false.C# Сравнение двух строк всегда возвращает false

private void ReadData() 
{ 
    if (serialPort1.IsOpen == true) 
    { 
     if (serialPort1.BytesToRead > 0) 
     { 
      string readBuffer = serialPort1.ReadLine(); 

      textBox2.Text = readBuffer; 
      if (readBuffer.Equals("A")) //MY MAIN PROBLEM 
      { 
       textBox2.Text += "YEP"; 
      } 
      else 
      { 
       textBox2.Text += "NOPE"; 
      } 
     } 
    } 
} 

В основном, когда микроконтроллер посылает букву «А», он читает и сохраняет его в readBuffer строку, и даже печатает его в textbox(textBox2). Мой результат всегда есть ANOPE в textbox (A - это то, что отправил микроконтроллер, и NOPE всегда там, потому что если не удалось). Я начал C# недавно и потерял несколько дней, пытаясь понять это, но я действительно не могу найти решение по-видимому простой проблемы.

+3

Возможно, новая строка включена в строку 'readBuffer'? –

+4

Вы отлаживаете это? Возможно, после строки 'A' в строке есть' \ n' или какой-либо другой байт. Вы выполнили 'ReadLine', поэтому может появиться новый символ строки, который не отображается в вашем текстовом поле. –

+1

Может быть «A» в другой кодировке (кириллица?) – dasblinkenlight

ответ

1

Благодаря Виллем Ван Onsem и Рене Фогт я понял проблему. После того, как он считывает данные и сохраняет их в readBuffer, он также включает в себя \ r (возврат каретки), что делает строку фактически «A \ r», поэтому она всегда была ложной по сравнению с «A».

+0

set 'serialPort1.NewLine =" \ r \ n "', а затем 'ReadLine()' будет nolonger возвращать '\ r' –

0

Две вещи, которые я представляю вам:
1. Вещи не всегда, как они появляются:. использование readBuffer.Trim() Равно («А») вместо.

  1. readBuffer.Equals ("A") выполняет порядковое (чувствительное к регистру и нечувствительное к культуре) сравнение.
    A = A, но A ≠ a, если вы используете .Equals для их сравнения.

Таким образом, в конечном счете, попробуйте это: (.. ReadBuffer.Trim() ToUpper() равно ("A"))
если

Смежные вопросы