Accès rapide :
Présentation de l'entête <stdint.h>
Exemple d'utilisation
Eléments fournis par la librairie <stdint.h>
La librairie <stdint.h>, introduite par le standard C99, définit des types entiers dont la taille est mieux maîtrisée
que celle des types historiques char, short, int ou long. Elle est particulièrement utile
quand le format binaire des données compte : protocoles réseau, fichiers binaires, registres matériels, sérialisation ou calculs nécessitant
une largeur connue.
En C++, l'entête équivalent est <cstdint> et il a été introduit avec C++11. Le principe reste le même : disposer de types
entiers plus explicites, comme int32_t, uint64_t,
uintptr_t ou intmax_t.
Pour utiliser les types et les constantes proposés par cette librairie, il suffit d'inclure l'entête suivant.
#include <stdint.h>
Attention cependant : les types de largeur exacte, comme int8_t ou uint32_t, ne sont fournis que si
l'implémentation sait réellement les représenter. Sur les plates-formes courantes, ils sont disponibles, mais le standard C laisse une marge
aux architectures plus exotiques.
L'exemple suivant montre l'utilisation de quelques types et constantes de <stdint.h>. Les conversions dans les appels à
printf permettent de garder un exemple simple sans introduire immédiatement la librairie <inttypes.h>.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <stdint.h> #include <stdio.h> #include <stdlib.h> int main() { int32_t temperature = -125; uint32_t flags = UINT32_C( 0x0000000F ); uint8_t red = UINT8_MAX; printf( "temperature == %ld\n", (long) temperature ); printf( "flags == %lu\n", (unsigned long) flags ); printf( "red == %u\n", (unsigned int) red ); return EXIT_SUCCESS; } |
Les résultats produits par cet exemple sont :
temperature == -125 flags == 15 red == 255
| Nom | Depuis | Description |
|---|---|---|
| int8_t, int16_t, int32_t, int64_t | C99 | Types entiers signés de largeur exacte. |
| uint8_t, uint16_t, uint32_t, uint64_t | C99 | Types entiers non signés de largeur exacte. |
| int_leastN_t et uint_leastN_t | C99 | Types entiers garantissant au minimum une largeur donnée. |
| int_fastN_t et uint_fastN_t | C99 | Types entiers au moins aussi larges que demandé et choisis pour être rapides. |
| intptr_t et uintptr_t | C99 | Types entiers capables de stocker une valeur de pointeur, quand l'implémentation les fournit. |
| intmax_t et uintmax_t | C99 | Types entiers les plus larges proposés par l'implémentation. |
| INT*_MIN, INT*_MAX et UINT*_MAX | C99 | Macros de limites associées aux types définis dans cette librairie. |
| INT*_C, UINT*_C, INTMAX_C et UINTMAX_C | C99 | Macros permettant de construire des constantes entières du bon type. |
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :