Problem mit String Vergleich

Hallo,

Ich greife vom Arduino mit Serieller Kommunikation auf eine Steuerung zu und send bei jedem Befehl eine Prüfsumme mit. Es wird auch wieder eine Prüfsumme mit dem empfangenen String zurückgesendet. Jetzt
überprüfe ich mittels einer xor Berechnung die Prüfsumme vom zurückgesendeten String und will diese mit der emfangenen Prüfsumme vergleichen. Ich hab bereits probiert mit:

if (char_x_data_array_str.compareTo(xor_hex_value_input_str) == 0) {
if ( char_x_data_array_str.equalsIgnoreCase(xor_hex_value_input_str)) {

Leider schaff ich es nicht zu Prüfen ob die Daten gleich sind.

Hier mal ein Auszug aus meinem Code.

Vielen Dank im Voraus für eurer Hilfe!

void check_received() {
  String xor_hex_value_input_str(xor_hex_value_input);          //convert chr to String
  String char_x_data_array_str(char_x_data_array);
    
    String char_x_data_array_strStateMsg = "char_x_data_array_str: = ";
  char_x_data_array_strStateMsg += char_x_data_array_str;
  TelnetMsg(char_x_data_array_strStateMsg);

  String xor_hex_value_input_strStateMsg = "xor_hex_value_input_str: = ";
  xor_hex_value_input_strStateMsg += xor_hex_value_input_str;
  TelnetMsg(xor_hex_value_input_strStateMsg);
  
  //if ((!strcmp(xor_hex_value_input_str, char_x_data_array_str)) || (without_check == true)) {                                 //Prüfung ob empfangene xor Prüfsumme mit emfangenen String übereinstimmt
  if ((char_x_data_array_str.compareTo(xor_hex_value_input_str) == 0) || (without_check == true)) {
  //if ( char_x_data_array_str.equalsIgnoreCase(xor_hex_value_input_str)) {  //  || (without_check == true)
    DataReceived = get_inData;
    String dataStateMsg = "Data received proofed: = ";        //Telnet
    dataStateMsg += DataReceived;
    TelnetMsg(dataStateMsg);
    Serial.println("received data looks good!");
    TelnetMsg("received data looks good!");
    sende_status = 0;                               //sende status auf 0 setzten um bei get variables die nächste funktion abzurufen
    //reset_millis = 1;
  }
  else {

    Serial.println("received data error!");
    TelnetMsg("received data error!");
    String dataReceivedCountStateMsg = "dataReceivedCount: = ";         //telnet
    dataReceivedCountStateMsg += dataReceivedCount;
    TelnetMsg(dataReceivedCountStateMsg);
    dataReceivedCount ++;
    if (dataReceivedCount < 4) {                    //wenn daten mehr als 3 mal falsch
      DataReceived = "";


      TelnetMsg("restart connecting because of data error!");
      error = true;
      sending();                                      //erneut senden
      receiving();                                    //erneut empfangen
      xor_input_proof();                              //erneute Xor berechnung von Input
      sende_status = 1;                               //sende status auf 1 setzten um den get variables loop nicht zu beenden
    }
    if (dataReceivedCount > 3) {
      TelnetMsg("restart the loop because of data error!");
      DataReceived = "";
      startMillis = millis();                       //initial start time
      state = 0;                                    //loop beenden
      dataReceivedCount = 0;
    }
  }
  /*
    if ( DataReceived  == DataReceived) {
    receiving();
    }*/
}

pool_test_xor.ino (12.6 KB)

Ohne den Code gelesen zu haben, empfehle ich dir, char array anstatt String Objekten zu nehmen. Aus bereits viel diskutierten Gründen.

Danke jetzt funktioniert es

lampi: Danke jetzt funktioniert es

Was hast Du geändert?

Gruß

Gregor