String in Integer aufsplitten bzw. Stunde und Minute aus Timestamp exportieren

Ich ziehe mir über den Server de.pool.ntp.org per NTP die aktuelle Uhrzeit.
Diese speicher ich mir in einen String 'formattedTime'. Die Ausgabe funktioniert damit.
20:54:23 beispielsweise. Eben nochmal getetstet, geht alles tadellos.

Ich habe das alles auf einem ESP32 getestet. Da konnte ich mir mit sscanf Stunden und Minuten als Integer speichern. Das sah dann so aus:

String formattedTime = timeClient.getFormattedTime().c_str();
const char *time = formattedTime.c_str();
sscanf(time, "%d:%d", &hour, &minute);

Die Variablen 'hour' und 'minute' konnte ich abrufen und damit auch Berechnungen anstellen. Aber natürlich funktionier sscanf nicht unter einem ESP8266 (NodeMCU Devkit V0.9). Gibt es äquivalente Befehle um das selbe zu erzielen? Oder aber, wie kann ich Stunden und Minuten aus dem String ziehen? Der Aufbau ist klar strukturiert. Stunden:Minuten:Sekunden. Am Ende möche ich nur einen Integer Stunden und einen Integer Minuten haben.

Schau Dir mal strtok an. Infos gibt es hier.

Gruß Tommy

void setup()
{
  Serial.begin(9600);

  String str = "20:54:23";

  char buffer[9];
  str.toCharArray(buffer, sizeof(buffer));

  int hour = atoi(strtok(buffer, ":"));
  int minute = atoi(strtok(NULL, ":"));
  int second = atoi(strtok(NULL, ":"));

  Serial.println(hour);
  Serial.println(minute);
  Serial.println(second);
}

void loop()
{
}

toCharArray() ist hier ausnahmsweise mal wirklich nötig weil strtok() den String verändert.

Das steht bei strtok dabei.

Gruß Tommy

Vielen Dank, funktionierte auf Anhieb!

Oder aber, wie kann ich Stunden und Minuten aus dem String ziehen?

timeClient.getFormattedTime().c_str();

Das ist erstmal gar kein String Objekt und brauchst du vermutlich auch gar nicht.

const char* tp = timeClient.getFormattedTime().c_str();

byte hour = get2digits(tp);
byte minute = get2digits(tp+3);

byte get2digits(const char * p) {
 // wenn p auf einen Text mit 2 Ziffern 0 .. 9 zeigt,
 // liefert diese Funktion eine Zahl 0 .. 99

   return (*p - '0' )*10 + *(p+1) - '0';
}

Nichts gegen strtok, geht aber hier auch einfacher:
Ich nehme mal an, der Text liefert führende Nullen mit.

Wenn du meinst, ein int zu brauchen, kannst du natürlich auch
int hourdefinieren. Wird trotzdem nur eine Zahl 0 .. 99