2010-09-04 35 views
5

Ho dichiarato una variabile uint8 e quando il valore in esso viene stampato, ottengo facce sorridenti e spazi bianchi. Non dovrebbe visualizzare valori interi?uint8 mostra strani caratteri

+1

inserisci il tuo codice. – tenfour

+0

Sto usando una libreria da un venditore..it restituisce un tipo uint8 – aks

+0

Stai provando a stamparlo come una stringa usando l'identificatore di formato '% s'? Prova invece a stampare i singoli caratteri. – dirkgently

risposta

12

Scommetto che uint8 è un typedef per unsigned char nelle intestazioni di sistema. Quindi std::cout << u stamperà i simboli anziché i valori interi, dove u è di tipo uint8. Prova

std::cout << static_cast<int>(u); 

o

std::cout << +u; 

di avere valori numerici stampati.

+0

ma non lo cast in int32? – aks

+0

Sì, lo sarà. Ma qual è il problema? Questo crea un int temporaneo dalla tua variabile uint8 e alimenta int a std :: cout per la stampa. – usta

+0

@Rajesh. Se si stampa in decimale, si ritiene che faccia la differenza se il valore è memorizzato in uint8 o uint32 poco prima che venga stampato? –

0

Tutto dipende da come si stampa il valore. Per cout, prova cout << (long unsigned int)var; e per printf, puoi provare a utilizzare l'identificatore di formato %lu. Tuttavia, come accennato in precedenza, è probabile che uint8 sia definito o typedef come qualcos'altro, poiché non è un tipo ISO C++. C'è anche la possibilità che uint8 sia tipizzato a unsigned long int (generico), o unsigned __int64 (specifico piattaforma MS), e che il compilatore MSVC++ stia facendo semplicemente la conversione implicita sbagliata. Senza sapere cosa è definito uint8, è difficile dirlo.

+0

uint8 viene utilizzato direttamente ....> typedef uint8 _UINT1; Nel commento, dice 1 byte intero (Come faccio a mettere un blocco grigio attorno al codice?) – aks

+0

Bene, quindi '_UIN1;' è probabilmente definito come qualcos'altro. Dovresti seguire i typedef fino a quando non colpisci il tipo intrinseco sottostante (sebbene, '_UINT1' sembra implicare un singolo char senza segno, non un numero a 64 bit). Inoltre, è possibile specificare il testo come codice (ovvero la "casella grigia") racchiudendolo in caratteri di virgolette. – Javert93

+0

typedef uint8 _UINT1; definisce _UINT1 come alias di uint8, non viceversa. Quindi dovrai cercare un typedef XXX uint8; dichiarazione per scoprire cosa è uint8. Oppure puoi semplicemente fidarti di me che è un intero senza segno a 8 bit ed è un alias per il carattere non firmato :) [u] i tipi intN [_t] indicano sempre interi N-bit, non interi N-byte. – usta

Problemi correlati