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é

Macros de format PRI*

La librairie inttypes.h Les macros SCN*


Entête à inclure

#include <inttypes.h>  // <cinttypes> en C++

Les macros PRI* produisent des fragments de chaînes utilisables avec les fonctions de la famille printf. Elles permettent d'afficher correctement les types fournis par <stdint.h>, sans supposer qu'un int64_t est forcément un long ou un long long.

Pour les types de largeur exacte, les macros correspondantes ne sont disponibles que si le type lui-même existe. Les macros en base binaire ont été ajoutées par C23 ; les versions PRIB* sont optionnelles.

Macro Type visé Conversion
PRId8 int8_t entier signé en base 10.
PRId16 int16_t entier signé en base 10.
PRId32 int32_t entier signé en base 10.
PRId64 int64_t entier signé en base 10.
PRIdLEAST8 int_least8_t entier signé en base 10.
PRIdLEAST16 int_least16_t entier signé en base 10.
PRIdLEAST32 int_least32_t entier signé en base 10.
PRIdLEAST64 int_least64_t entier signé en base 10.
PRIdFAST8 int_fast8_t entier signé en base 10.
PRIdFAST16 int_fast16_t entier signé en base 10.
PRIdFAST32 int_fast32_t entier signé en base 10.
PRIdFAST64 int_fast64_t entier signé en base 10.
PRIdMAX intmax_t entier signé en base 10.
PRIdPTR intptr_t entier signé en base 10.
PRIi8 int8_t entier signé en base 10.
PRIi16 int16_t entier signé en base 10.
PRIi32 int32_t entier signé en base 10.
PRIi64 int64_t entier signé en base 10.
PRIiLEAST8 int_least8_t entier signé en base 10.
PRIiLEAST16 int_least16_t entier signé en base 10.
PRIiLEAST32 int_least32_t entier signé en base 10.
PRIiLEAST64 int_least64_t entier signé en base 10.
PRIiFAST8 int_fast8_t entier signé en base 10.
PRIiFAST16 int_fast16_t entier signé en base 10.
PRIiFAST32 int_fast32_t entier signé en base 10.
PRIiFAST64 int_fast64_t entier signé en base 10.
PRIiMAX intmax_t entier signé en base 10.
PRIiPTR intptr_t entier signé en base 10.
PRIb8 (C23) uint8_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIb16 (C23) uint16_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIb32 (C23) uint32_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIb64 (C23) uint64_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIbLEAST8 (C23) uint_least8_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIbLEAST16 (C23) uint_least16_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIbLEAST32 (C23) uint_least32_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIbLEAST64 (C23) uint_least64_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIbFAST8 (C23) uint_fast8_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIbFAST16 (C23) uint_fast16_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIbFAST32 (C23) uint_fast32_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIbFAST64 (C23) uint_fast64_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIbMAX (C23) uintmax_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIbPTR (C23) uintptr_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIB8 (C23) uint8_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIB16 (C23) uint16_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIB32 (C23) uint32_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIB64 (C23) uint64_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIBLEAST8 (C23) uint_least8_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIBLEAST16 (C23) uint_least16_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIBLEAST32 (C23) uint_least32_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIBLEAST64 (C23) uint_least64_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIBFAST8 (C23) uint_fast8_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIBFAST16 (C23) uint_fast16_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIBFAST32 (C23) uint_fast32_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIBFAST64 (C23) uint_fast64_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIBMAX (C23) uintmax_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIBPTR (C23) uintptr_t entier non signé en base 2. Cette macro est optionnelle et n'est fournie que si le spécificateur B est supporté.
PRIo8 uint8_t entier non signé en base 8.
PRIo16 uint16_t entier non signé en base 8.
PRIo32 uint32_t entier non signé en base 8.
PRIo64 uint64_t entier non signé en base 8.
PRIoLEAST8 uint_least8_t entier non signé en base 8.
PRIoLEAST16 uint_least16_t entier non signé en base 8.
PRIoLEAST32 uint_least32_t entier non signé en base 8.
PRIoLEAST64 uint_least64_t entier non signé en base 8.
PRIoFAST8 uint_fast8_t entier non signé en base 8.
PRIoFAST16 uint_fast16_t entier non signé en base 8.
PRIoFAST32 uint_fast32_t entier non signé en base 8.
PRIoFAST64 uint_fast64_t entier non signé en base 8.
PRIoMAX uintmax_t entier non signé en base 8.
PRIoPTR uintptr_t entier non signé en base 8.
PRIu8 uint8_t entier non signé en base 10.
PRIu16 uint16_t entier non signé en base 10.
PRIu32 uint32_t entier non signé en base 10.
PRIu64 uint64_t entier non signé en base 10.
PRIuLEAST8 uint_least8_t entier non signé en base 10.
PRIuLEAST16 uint_least16_t entier non signé en base 10.
PRIuLEAST32 uint_least32_t entier non signé en base 10.
PRIuLEAST64 uint_least64_t entier non signé en base 10.
PRIuFAST8 uint_fast8_t entier non signé en base 10.
PRIuFAST16 uint_fast16_t entier non signé en base 10.
PRIuFAST32 uint_fast32_t entier non signé en base 10.
PRIuFAST64 uint_fast64_t entier non signé en base 10.
PRIuMAX uintmax_t entier non signé en base 10.
PRIuPTR uintptr_t entier non signé en base 10.
PRIx8 uint8_t entier non signé en base 16, lettres minuscules.
PRIx16 uint16_t entier non signé en base 16, lettres minuscules.
PRIx32 uint32_t entier non signé en base 16, lettres minuscules.
PRIx64 uint64_t entier non signé en base 16, lettres minuscules.
PRIxLEAST8 uint_least8_t entier non signé en base 16, lettres minuscules.
PRIxLEAST16 uint_least16_t entier non signé en base 16, lettres minuscules.
PRIxLEAST32 uint_least32_t entier non signé en base 16, lettres minuscules.
PRIxLEAST64 uint_least64_t entier non signé en base 16, lettres minuscules.
PRIxFAST8 uint_fast8_t entier non signé en base 16, lettres minuscules.
PRIxFAST16 uint_fast16_t entier non signé en base 16, lettres minuscules.
PRIxFAST32 uint_fast32_t entier non signé en base 16, lettres minuscules.
PRIxFAST64 uint_fast64_t entier non signé en base 16, lettres minuscules.
PRIxMAX uintmax_t entier non signé en base 16, lettres minuscules.
PRIxPTR uintptr_t entier non signé en base 16, lettres minuscules.
PRIX8 uint8_t entier non signé en base 16, lettres minuscules.
PRIX16 uint16_t entier non signé en base 16, lettres minuscules.
PRIX32 uint32_t entier non signé en base 16, lettres minuscules.
PRIX64 uint64_t entier non signé en base 16, lettres minuscules.
PRIXLEAST8 uint_least8_t entier non signé en base 16, lettres minuscules.
PRIXLEAST16 uint_least16_t entier non signé en base 16, lettres minuscules.
PRIXLEAST32 uint_least32_t entier non signé en base 16, lettres minuscules.
PRIXLEAST64 uint_least64_t entier non signé en base 16, lettres minuscules.
PRIXFAST8 uint_fast8_t entier non signé en base 16, lettres minuscules.
PRIXFAST16 uint_fast16_t entier non signé en base 16, lettres minuscules.
PRIXFAST32 uint_fast32_t entier non signé en base 16, lettres minuscules.
PRIXFAST64 uint_fast64_t entier non signé en base 16, lettres minuscules.
PRIXMAX uintmax_t entier non signé en base 16, lettres minuscules.
PRIXPTR uintptr_t entier non signé en base 16, lettres minuscules.

Exemple de code

L'exemple suivant affiche un entier 64 bits, un entier maximal et une valeur de pointeur convertie en entier.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
#include <inttypes.h>
#include <stdio.h>

int main() {

    uint64_t size = UINT64_C( 1234567890123 );
    intmax_t balance = INTMAX_C( -9000000000 );
    uintptr_t address = (uintptr_t) &size;

    printf( "size    == %" PRIu64 "\n", size );
    printf( "balance == %" PRIdMAX "\n", balance );
    printf( "address == 0x%" PRIxPTR "\n", address );

#ifdef PRIb32
    printf( "binary  == %" PRIb32 "\n", UINT32_C( 42 ) );
#endif

    return 0;
}
Macros de format pour printf

Sujets connexes

Macros SCN*
printf, fprintf et sprintf
stdint.h / cstdint


La librairie inttypes.h Les macros SCN*




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