Mais je ne vois justement pas comment je peux récupérer la valeur décimal.
Il faudrait expliquer quel est le but de la manœuvre.
Ne t'inquiète pas, peu de gens comprennent immédiatement. Il n'y a rien d'anormal.
Reprenons :
Il n'y a aucune conversion à faire. Un caractère en mémoire est binaire avant tout. Un 'A' reste une suite de 0 et de 1 : 1000001 et c'est tout.
Comme je l'ai déjà dit un caractère n'a pas de valeur décimale. C'est une suite de 8 bits qui ont chacun une valeur 1 ou 0.
On peut l'afficher de la manière qui nous arrange, y compris décimale, mais cela n'est qu'une représentation pour l’œil humain, ou plutôt le cerveau, plus habitué au décimal.
Le décalage pas vraiment, c'était surtout ça dont j'aurais aimé une explication. Je suis désolé, je ne me suis pas très bien exprimer.
Considérons l'opération suivante :
char b = 'A'; // 10000001
Serial.println(b & 0x01);
b >>= 1;
b vaut donc 'A', donc 41 en hexadécimal, et 1000001 en binaire, en mémoire au départ.
Le bit de poids fort est à gauche, le bit de poids faible à droite.
b & 0x01 représente un ET binaire.
0x01 vaut 00000001 en binaire. Si l'on fait l'opération 1000001 ET 00000001 on obtient 1.
1 est le bit de poids faible de 10000001.
Ensuite on décale vers la droite :
b >>= 1;
Tous les bits sont décalés vers la droite, le bit de poids faible est perdu.
b devient donc égal à 01000000.
Le bit de poids fort est décalé également vers la droite.
Si l'on refait l'opération b & 00000001 on obtient 0.
0 est le bit de poids faible de 01000000.
Si l'on répète l'opération 8 fois de suite, b vaut forcément 00000000 à la fin.
On peut décaler à droite, à gauche, de 1 bits ou plusieurs :
b <<= 1;
b >>= 1;
b <<= 2;
b >>= 3;
b <<= 1; étant une contraction de b = b << 1;
Tu peux essayer les opérations binaires avec une calculette de programmation ou même des pions noirs et blancs.