web-dev-qa-db-fra.com

Comment sprintf un caractère non signé?

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'

14
Christoferw

Utilisez printf() Format Strings %u:

printf("%u", 'c');
18
Ariel

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é.

35
MAK

É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]);
6
user195488

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.

3
eduffy

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.

1
R Samuel Klatchko