Ce que je veux:Fractionnement Chaîne en C++
Pour analyser une chaîne d'adresse MAC et obtenir un tableau de six valeurs uint8_t
, ayant une entrée comme string str = "01:23:45:AB:CD:EF";
.
Ce que j'ai essayé (et n'a pas fonctionné):
sscanf(str.c_str(), "%x:%x:%x:%x:%x:%x", &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]);
Pourquoi cela n'a pas fonctionné: Je suis la programmation d'un module Wi-Fi ESP8266 avec l'aide du IDE Arduino. Même si les cœurs officiels de la carte Arduino prennent en charge sscanf()
, les cœurs de l'ESP8266 ne le sont pas. (The solution to the issue given on GitHub ne fonctionne pas, comme l'a déclaré nicjohnston.)
moins préféré:
Tout ce qui utilise trop de RAM, les cycles de CPU ou de stockage du programme.
Également certaines choses utilisant ou directement/indirectement selon sscanf
, setjmp
, longjmp
, (et plusieurs autres) peuvent ne pas fonctionner.
Editer: La réponse de @ m.s. ci-dessous est tout à fait correct, mais je me suis rendu compte qu'après avoir conçu mon propre code (donné ci-dessous).
for(uint8_t i=0; i<5; i++)
mac[i]=strtol(Serial.readStringUntil(':').c_str(),NULL,16);
mac[6]=strtol(Serial.readStringUntil('\n').c_str(),NULL,16);
@ sbrm1 'mac' contiendra' {0x01, 0x23, 0x45, 0xAB, 0xCD, 0xEF} ', dont ** sont ** les valeurs hexadécimales et ** pas ** les valeurs ASCII –
Votre code est correct, merci. Mais quelle est la logique derrière tout cela? (ma contribution était erronée). – sbrm1
@ sbrm1 J'ai mis à jour mon code avec une explication –