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 SCN*

Les macros PRI* Le type imaxdiv_t


Entête à inclure

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

Les macros SCN* produisent des fragments de chaînes utilisables avec les fonctions de la famille scanf. Elles servent à lire directement des valeurs dans les types définis par <stdint.h>.

Comme pour les macros PRI*, les macros associées aux types de largeur exacte dépendent de la présence effective des types correspondants. Les conversions binaires SCNb* ont été ajoutées par C23.

Macro Type visé Conversion
SCNd8 int8_t entier signé en base 10.
SCNd16 int16_t entier signé en base 10.
SCNd32 int32_t entier signé en base 10.
SCNd64 int64_t entier signé en base 10.
SCNdLEAST8 int_least8_t entier signé en base 10.
SCNdLEAST16 int_least16_t entier signé en base 10.
SCNdLEAST32 int_least32_t entier signé en base 10.
SCNdLEAST64 int_least64_t entier signé en base 10.
SCNdFAST8 int_fast8_t entier signé en base 10.
SCNdFAST16 int_fast16_t entier signé en base 10.
SCNdFAST32 int_fast32_t entier signé en base 10.
SCNdFAST64 int_fast64_t entier signé en base 10.
SCNdMAX intmax_t entier signé en base 10.
SCNdPTR intptr_t entier signé en base 10.
SCNi8 int8_t entier signé avec base détectée automatiquement.
SCNi16 int16_t entier signé avec base détectée automatiquement.
SCNi32 int32_t entier signé avec base détectée automatiquement.
SCNi64 int64_t entier signé avec base détectée automatiquement.
SCNiLEAST8 int_least8_t entier signé avec base détectée automatiquement.
SCNiLEAST16 int_least16_t entier signé avec base détectée automatiquement.
SCNiLEAST32 int_least32_t entier signé avec base détectée automatiquement.
SCNiLEAST64 int_least64_t entier signé avec base détectée automatiquement.
SCNiFAST8 int_fast8_t entier signé avec base détectée automatiquement.
SCNiFAST16 int_fast16_t entier signé avec base détectée automatiquement.
SCNiFAST32 int_fast32_t entier signé avec base détectée automatiquement.
SCNiFAST64 int_fast64_t entier signé avec base détectée automatiquement.
SCNiMAX intmax_t entier signé avec base détectée automatiquement.
SCNiPTR intptr_t entier signé avec base détectée automatiquement.
SCNb8 (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é.
SCNb16 (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é.
SCNb32 (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é.
SCNb64 (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é.
SCNbLEAST8 (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é.
SCNbLEAST16 (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é.
SCNbLEAST32 (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é.
SCNbLEAST64 (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é.
SCNbFAST8 (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é.
SCNbFAST16 (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é.
SCNbFAST32 (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é.
SCNbFAST64 (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é.
SCNbMAX (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é.
SCNbPTR (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é.
SCNo8 uint8_t entier non signé en base 8.
SCNo16 uint16_t entier non signé en base 8.
SCNo32 uint32_t entier non signé en base 8.
SCNo64 uint64_t entier non signé en base 8.
SCNoLEAST8 uint_least8_t entier non signé en base 8.
SCNoLEAST16 uint_least16_t entier non signé en base 8.
SCNoLEAST32 uint_least32_t entier non signé en base 8.
SCNoLEAST64 uint_least64_t entier non signé en base 8.
SCNoFAST8 uint_fast8_t entier non signé en base 8.
SCNoFAST16 uint_fast16_t entier non signé en base 8.
SCNoFAST32 uint_fast32_t entier non signé en base 8.
SCNoFAST64 uint_fast64_t entier non signé en base 8.
SCNoMAX uintmax_t entier non signé en base 8.
SCNoPTR uintptr_t entier non signé en base 8.
SCNu8 uint8_t entier non signé en base 10.
SCNu16 uint16_t entier non signé en base 10.
SCNu32 uint32_t entier non signé en base 10.
SCNu64 uint64_t entier non signé en base 10.
SCNuLEAST8 uint_least8_t entier non signé en base 10.
SCNuLEAST16 uint_least16_t entier non signé en base 10.
SCNuLEAST32 uint_least32_t entier non signé en base 10.
SCNuLEAST64 uint_least64_t entier non signé en base 10.
SCNuFAST8 uint_fast8_t entier non signé en base 10.
SCNuFAST16 uint_fast16_t entier non signé en base 10.
SCNuFAST32 uint_fast32_t entier non signé en base 10.
SCNuFAST64 uint_fast64_t entier non signé en base 10.
SCNuMAX uintmax_t entier non signé en base 10.
SCNuPTR uintptr_t entier non signé en base 10.
SCNx8 uint8_t entier non signé en base 16, lettres minuscules.
SCNx16 uint16_t entier non signé en base 16, lettres minuscules.
SCNx32 uint32_t entier non signé en base 16, lettres minuscules.
SCNx64 uint64_t entier non signé en base 16, lettres minuscules.
SCNxLEAST8 uint_least8_t entier non signé en base 16, lettres minuscules.
SCNxLEAST16 uint_least16_t entier non signé en base 16, lettres minuscules.
SCNxLEAST32 uint_least32_t entier non signé en base 16, lettres minuscules.
SCNxLEAST64 uint_least64_t entier non signé en base 16, lettres minuscules.
SCNxFAST8 uint_fast8_t entier non signé en base 16, lettres minuscules.
SCNxFAST16 uint_fast16_t entier non signé en base 16, lettres minuscules.
SCNxFAST32 uint_fast32_t entier non signé en base 16, lettres minuscules.
SCNxFAST64 uint_fast64_t entier non signé en base 16, lettres minuscules.
SCNxMAX uintmax_t entier non signé en base 16, lettres minuscules.
SCNxPTR uintptr_t entier non signé en base 16, lettres minuscules.

Exemple de code

L'exemple suivant lit des valeurs depuis des chaînes de caractères en utilisant les macros adaptées aux types de destination.

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

int main() {

    const char * signedText = "-12345";
    const char * unsignedText = "4294967295";

    int32_t value;
    uint32_t limit;

    if ( sscanf( signedText, "%" SCNd32, &value ) == 1 ) {
        printf( "value == %" PRId32 "\n", value );
    }

    if ( sscanf( unsignedText, "%" SCNu32, &limit ) == 1 ) {
        printf( "limit == %" PRIu32 "\n", limit );
    }

    return 0;
}
Macros de format pour scanf

Sujets connexes

Macros PRI*
scanf, fscanf et sscanf
strtoimax et strtoumax


Les macros PRI* Le type imaxdiv_t




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