#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. |
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; } |
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 :