Cela ne fonctionne pas:
unsigned char foo;
foo = 0x123;
sprintf("the unsigned value is:%c",foo);
Je reçois cette erreur:
impossible de convertir le paramètre 2 de "Unfsigned Char" en 'Char'
Utilisez printf()
Format Strings %u
:
printf("%u", 'c');
Avant de partir en regardant des caractères non signés causant le problème, examinez de plus près cette ligne:
sprintf("the unsigned value is:%c",foo);
Le premier argument de Sprintf est toujours la chaîne auquel la valeur sera imprimée. Cette ligne devrait ressembler à quelque chose comme:
sprintf(str, "the unsigned value is:%c",foo);
Sauf si vous vouliez dire Printf au lieu de Sprintf.
Après avoir fixé cela, vous pouvez utiliser% u dans votre chaîne de format pour imprimer la valeur d'un type non signé.
ÉDITER
snprintf
est un peu plus sûr. Il appartient au développeur de s'assurer que la bonne taille de la mémoire tampon est utilisée.
Essaye ça :
char p[255]; // example
unsigned char *foo;
...
foo[0] = 0x123;
...
snprintf(p, sizeof(p), " 0x%X ", (unsigned char)foo[0]);
Je pense que votre confondu avec la façon dont sprintf
fonctionne. Le premier paramètre est un tampon à chaîne, la seconde est une chaîne de formatage, puis les variables que vous souhaitez produire.
Vous ne devez pas utiliser Sprintf car il peut facilement causer un débordement de tampon.
Vous devez préférer SnPRINTF (ou _SNPRINTF lors de la programmation avec la bibliothèque Microsoft Standard C). Si vous avez alloué le tampon sur la pile dans la fonction locale, vous pouvez faire:
char buffer[SIZE];
snprintf(buffer, sizeof(buffer), "...fmt string...", parameters);
Les données peuvent être tronquées mais qui sont définitivement préférables à déborder le tampon.