Transformation char hexadecimal en byte [Résolu]

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

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

Oui ca j'ai vu mais faut utiliser des strings non ?

edit : voila donc faut que j'introduise des string

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/

Ok donc je vais etudier plus a fond j'avais eludé merci

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

byte val = strtol (arg_list[2],NULL,16);

je viens d'essayer avec ca ca marche je regarde le post precedent attentivement
merci

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.

Ok merci je vais modifier tout ca dans ce sens.

Merci de cette aide précieuse.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.