uint8
, uint16
, uint32
e uint64
sono probabilmente tipi specifici di Microsoft.
A partire dalla serie 1999, C supporta typedef standard con significati simili, definite in <stdint.h>
: uint8_t
, uint16_t
, uint32_t
e uint64_t
. Suppongo che i tipi specifici di Microsoft siano definiti in modo simile. Microsoft supporta <stdint.h>
, almeno a partire da Visual Studio 2010, ma il codice precedente potrebbe utilizzare uint8
e altri.
I tipi predefiniti char
, short
, int
e altri hanno dimensioni che variano da un'implementazione C a un'altra. Lo standard C ha determinati requisiti minimi (char
è almeno 8 bit, short
e sono almeno 16, long
è almeno 32 e ogni tipo in quell'elenco è largo almeno come il tipo precedente), ma consente un po 'di flessibilità. Ad esempio, ho visto sistemi in cui lo int
è 16, 32 o 64 bit.
char
è quasi sempre esattamente 8 bit, ma è consentito essere più ampio. E semplice char
può essere firmato o non firmato.
uint8_t
è necessario essere un tipo intero senza segno con esattamente 8 bit di larghezza.È probabile che sia un typedef per unsigned char
, anche se potrebbe essere un typedef per plain char
se plain char
risulta non firmato. Se non è presente un tipo predefinito di 8 bit senza segno, allora non sarà definito uint8_t
.
Analogamente, ogni tipo di uintN_t
è un tipo senza segno con esattamente N bit di larghezza.
Inoltre, <stdint.h>
definisce corrispondente firmati intN_t
tipi, nonché int_fastN_t
e int_leastN_t
tipi che sono almeno larghezza specificata.
I tipi [u]intN_t
non hanno bit di riempimento, quindi la dimensione di ciascuno è esattamente N bit. I tipi firmati intN_t
sono necessari per utilizzare una rappresentazione a complemento a 2.
Anche se uint32_t
potrebbe essere lo stesso di unsigned int
, per esempio, non deve presumere che. Utilizzare unsigned int
quando è necessario un tipo intero senza segno con almeno 16 bit di larghezza e questa è la dimensione "naturale" per il sistema corrente. Utilizzare uint32_t
quando è necessario un tipo intero senza segno con esattamente 32 bit di larghezza.
(E no, uint64
o uint64_t
non è la stessa come double
; double
è un tipo in virgola mobile.)
dovrebbe essere 'typedef uint8 char unsigned;', uso uint8_t, uint16_t, uint32_t in. –
BLUEPIXY
'sizeof c' è 50? Dovrebbe essere '20 * sizeof (unsigned int)' che non può essere 50. – ajay
come convertire l'int in char per ottenere la soluzione finale in char ?? – user3458454