Come sprintf un unsigned char?
-
20-09-2019 - |
Domanda
Questo non funziona:
unsigned char foo;
foo = 0x123;
sprintf("the unsigned value is:%c",foo);
ottengo questo errore:
non può convertire il parametro 2 da 'Unsigned char' a 'char'
Soluzione
Usa printf()
stringa di formato s %u
:
printf("%u", 'c');
Altri suggerimenti
Prima di andare fuori guardando caratteri senza segno la causa del problema, dare un'occhiata più da vicino a questa linea:
sprintf("the unsigned value is:%c",foo);
Il primo parametro di sprintf è sempre la stringa a cui viene stampato il valore. Quella linea dovrebbe essere simile a:
sprintf(str, "the unsigned value is:%c",foo);
A meno che non si intende printf invece di sprintf.
Dopo aver sistemato questo, è possibile utilizzare% u nella stringa di formato per stampare il valore di un tipo unsigned.
Modifica
snprintf
è un po 'più sicuro. Sta allo sviluppatore per garantire la giusta dimensione del buffer viene utilizzato.
Prova questo:
char p[255]; // example
unsigned char *foo;
...
foo[0] = 0x123;
...
snprintf(p, sizeof(p), " 0x%X ", (unsigned char)foo[0]);
Credo che la vostra confuso con le opere sprintf
modo. Il primo parametro è un buffer di stringa, il secondo è una stringa di formattazione, e poi le variabili che si desidera trasmettere.
Non si deve usare sprintf come si può facilmente causare un buffer overflow.
Si dovrebbe preferire snprintf (o _snprintf durante la programmazione con la libreria C standard di Microsoft). Se avete assegnato il buffer sullo stack nella funzione locale, si può fare:
char buffer[SIZE];
snprintf(buffer, sizeof(buffer), "...fmt string...", parameters);
I dati potranno troncati ma che è sicuramente preferibile traboccare il buffer.