68tjs:
Pourquoi uint8_t -> unsigned char ? Un uint8_t c'est un octet !
J'aime bien quand c'est le plus clair possible.
Un char c'est un type caractère, c'est fait pour désigner des caractère alphanumériques
Un entier sur un octet c'est un nombre.
disons qu'il y a la spécification du langage et ensuite des particularités des environnements et l'évolution naturelle de l'informatique.
Si vous êtes puriste (et un peu en retard sur la norme), en langage C il n'y a que quatre types de variables entières:
char
short int, ou plus simplement short
int
long int, ou long
et on peut ensuite préciser la représentation du nombre au sein d'un type en précisant si l'on souhaite avoir que des nombre positifs ou aussi des négatifs. ce sont les mots clés signed ou unsigned (La représentation moderne des nombres négatifs utilise le complément à 2 )
La norme prévoit aussi une relation d'ordre entre les "domaines" représentables de valeurs
domaine(char) ≤ domaine(short) ≤ domaine(int) ≤ domaine(long)
Puis La norme ISO C99 a décidé d'introduire de nouveaux types (les micro-processeurs ayant bien progressé avec des architectures 64 bits et des unités vectorielles sur 128 ou 256 bits) et on a eu droit à
long long int, ou long long
et les architecture "embedded" se faisant plus disponible et pour garantir une taille en bits standard, ils ont décidé d'avoir plusieurs nouveaux types du genre int[color=blue]N[/color]_t ou uint[color=blue]N[/color]_t où N représente un nombre entier définissant la taille requise en bit (vous trouvez cela dans stdint.h ) et il y a aussi les int_least[color=blue]N[/color]_t ou int_fast[color=blue]N[/color]_t qui permettent des optimisations ---> plus d'info ici: Fixed-width integer types
Maintenant quand on parle de "caractère alphanumériques" on ne définit pas le nombre de bits ou d'octets que le compilateur va utiliser. Par définition dans la norme, la taille du type char, notée sizeof(char), vaut toujours 1. Cependant, il faut faire attention: contrairement à ce qu'on pense souvent, un char au sens du C ne vaut pas toujours un octet. Il occupera au minimum 8 bits, mais il existe des architectures (relativement spécialisées) ayant des char de 9 bits ou de 16 bits,
A noter aussi qu'à l'origine, le type permettant de représenter un caractère est char mais un char n'est plus toujours suffisant aujourd'hui pour représenter un caractère quelconque essayez donc de faire sur votre arduino
char message[] = "Noël";
void setup() {
Serial.begin(115200);
Serial.print("Taille d'un char: "); Serial.println(sizeof(char));
Serial.print("Longueur du message: "); Serial.println(strlen(message));
for (byte i = 0; i < strlen(message); i++) {
Serial.print("charactère #"); Serial.print(i);
Serial.print("\t["); Serial.print(message[i]); // on imprime le caractère tel que reconnu en ASCII
Serial.print("]\t"); Serial.println((uint8_t) message[i]); // on imprime le code du caractère
}
}
void loop() {}