jfs59
January 15, 2024, 9:33am
1
Bonjour
je galère sur un truc qui devrait être simple.
j'ai ceci
char arg_list[MAX_ARGS][MAX_ARGS_LEN]; (peu importe les valeurs)
a un moment donné j'ai arg_list[2] qui contient entre 00 et FF ce sont donc des caractères.
il existe des fonctions du type
byte bloc = atoi(arg_list[1]); qui fonctionnent si arg_list[1] contient 125 par exemple
et donc le voudrais la même pour de l'hexa
voila je sais pas si ca exite sinon comment faire
merci
J-M-L
January 15, 2024, 9:38am
2
Regardez strtol() et ses variantes
Il faut bien sûr que ce soit des cStrings bien formées donc avec le caractère nul de fin de chaîne
jfs59
January 15, 2024, 9:40am
3
Oui ca j'ai vu mais faut utiliser des strings non ?
edit : voila donc faut que j'introduise des string
J-M-L
January 15, 2024, 9:40am
4
Des cStrings oui, mais si atoi() fonctionne c’est le cas aussi pour strtol() (et c’est mieux que atoi() car on a plus d’infos sur le parsing)
https://cplusplus.com/reference/cstdlib/strtol/
jfs59
January 15, 2024, 9:41am
5
Ok donc je vais etudier plus a fond j'avais eludé merci
J-M-L
January 15, 2024, 9:57am
8
un exemple (sans test de validité)
const byte MAX_ARGS_LEN = 10;
char arg_list[][MAX_ARGS_LEN] = {"FF", "10", "20", "AB", "DEADBEEF"};
const byte nbArgs = sizeof arg_list / sizeof * arg_list;
void setup() {
Serial.begin(115200);
for (byte i = 0; i < nbArgs; i++) {
long v = strtol(arg_list[i], nullptr, 16);
Serial.print("texte [");
Serial.print(arg_list[i]);
Serial.print("] => ");
Serial.println(v);
}
}
void loop() {}
vous devriez voir dans la console à 115200 bauds
texte [FF] => 255
texte [10] => 16
texte [20] => 32
texte [AB] => 171
texte [DEADBEEF] => 2147483647
jfs59
January 15, 2024, 9:59am
9
byte val = strtol (arg_list[2],NULL,16);
je viens d'essayer avec ca ca marche je regarde le post precedent attentivement
merci
J-M-L
January 15, 2024, 10:01am
10
si vous voulez une valeur non signée il vaut mieux utiliser strtoul()
le pointeur sur pointeur (si vous ne passez pas nullptr comme deuxième paramètre) sert à savoir si vous avez pu décoder correctement. S'il est égal au premier caractère c'est que vous n'avez pas pu commencer à décoder et s'il ne pointe pas sur une caractère nul c'est que le décodage s'est arrêté avant la fin de la cString et donc qu'il restait du texte pas forcément conforme après la valeur.
jfs59
January 15, 2024, 10:06am
11
Ok merci je vais modifier tout ca dans ce sens.
Merci de cette aide précieuse.
system
Closed
July 13, 2024, 10:06am
12
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.