Questo non funziona:Come sprintf un char non firmato?
unsigned char foo;
foo = 0x123;
sprintf("the unsigned value is:%c",foo);
ottengo questo errore:
cannot convert parameter 2 from 'unsigned char' to 'char'
Questo non funziona:Come sprintf un char non firmato?
unsigned char foo;
foo = 0x123;
sprintf("the unsigned value is:%c",foo);
ottengo questo errore:
cannot convert parameter 2 from 'unsigned char' to 'char'
printf ("% u", 'c');
questo funziona, devo usare printf invece di sprintf – Christoferw
No - avviso sto chiamando printf, non sprintf, solo per dare un esempio di "% u" è necessario ottenere il valore decimale di il char. – Ariel
EDIT
snprintf
è un po 'più sicuro. Spetta allo sviluppatore assicurarsi che venga utilizzata la giusta dimensione del buffer.
Prova questo:
char p[255]; // example
unsigned char *foo;
...
foo[0] = 0x123;
...
snprintf(p, sizeof(p), " 0x%X ", (unsigned char)foo[0]);
è solo un esempio .. è necessario sprintf in un char unsigned di qualcosa.p è un buffer di stringa –
quindi ottengo questo errore: pedice richiede un tipo di array o puntatore – Christoferw
abbiamo bisogno di vedere più codice. –
Penso che la tua confusione con il modo in cui sprintf
funziona. Il primo parametro è un buffer di stringa, il secondo è una stringa di formattazione e quindi le variabili che si desidera esportare.
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 argomento di sprintf è sempre la stringa a cui verrà stampato il valore. La riga deve essere simile a:
sprintf(str, "the unsigned value is:%c",foo);
A meno che non si intendesse printf anziché sprintf.
Dopo aver corretto ciò, è possibile utilizzare% u nella stringa di formato per stampare il valore di un tipo senza segno.
Non utilizzare sprintf poiché può facilmente causare un overflow del buffer.
Si consiglia di preferire snprintf (o _snprintf quando si programma 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 possono ottenere troncati, ma che è sicuramente preferibile traboccare il buffer.
Sei sicuro che l'errore non è "impossibile convertire il parametro 2 da" unsigned char "a" char * "? –
Manca un parametro a sprintf() Il primo parametro è il buffer di output. stringa.Tutti i rimanenti dipendono dalla stringa di formato.Se vuoi solo stampare a std out usa printf() (nota no 's' all'inizio) –
Ti consiglio di controllare se è 'isalnum (..) 'rispetto al valore esadecimale effettivo invece di stampare arbitrariamente il valore del carattere.Non tutti hanno valori esadecimali visibili come 0x01. –