Participer au site avec un Tip
Rechercher
 

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 :

Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé

La librairie <stdint.h> (<cstdint> en C++)

Les types de largeur exacte


Accès rapide :
Présentation de l'entête <stdint.h>
Exemple d'utilisation
Eléments fournis par la librairie <stdint.h>

Présentation de l'entête <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.

Exemple d'utilisation

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;
}
Exemple d'utilisation de stdint.h

Les résultats produits par cet exemple sont :

temperature == -125
flags == 15
red == 255

Eléments fournis par la librairie <stdint.h>

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.


Les types de largeur exacte




Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé