String (objekt) vs. char array

SBond:
Ich habe selber gemerkt, dass ich mit einem normalen Array mehr machen kann, als mit den Strings.

Aha. Deshalb wohl der merkwürdige Zwitter in Deinem Programm, wo vor dem Umwandeln des HEX-Wertes in der CRC-Summe ein Substring in ein char-Array umkopiert wird, um dann doch mit einem char-Array zu arbeiten.

String-Objekte sind eben extrem stark eingeschränkt, was man damit machen kann, das sind nicht besonders viele Funktionen.

SBond:
Meine einzige Hoffnung war, dass ich RAM einspare.

Teste mal diesen Sketch, in dem ich zweimal drei Zeilen auskommentiert habe:

void setup() {
  Serial.begin(9600);
  unsigned long time=micros();
  /*
  char text[31]= "123456890";
  char text1[]="12345568901234556890";
  strncat(text,text1,sizeof(text));
  */
  /*
  String text= "123456890";
  String text1="12345568901234556890";
  text= text+text1;
  */
  time=micros()-time;
  Serial.println(text);
  Serial.print("Dauer: ");Serial.println(time);
  Serial.print("Ram frei: ");Serial.println(freeRam());
}

 int freeRam () {
  extern int __heap_start, *__brkval; 
  int v; 
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}

void loop() {}

Entferne mal die Kommentierung für die einen oder für die anderen drei Zeilen. Es werden jeweils ein 10 Zeichen langer String und ein 20 Zeichen langer String zu einem 30 Zeichen langen String zusammenkopiert und dabei wird gemessen

  • der Zeitbedarf
  • der freie RAM-Speicher am Ende nach dem Zusammenkopieren

Das Arbeiten mit String-Objekten führt im Programm nicht nur zu einem höheren RAM-Speicherverbrauch, sondern im übrigen auch zu einem deutlich höheren Rechenzeitbedarf für die Stringoperationen.