Wie verwende ich int16_t oder int32_t mit Funktionen wie scanf [duplicate]

Diese Frage hat hier bereits eine Antwort:

printf-Formatspezifizierer für uint32_t und size_t 4 Antworten

o wie ich es versteint16_t oderint32_t in C bedeutet, dass sie auf Ihrem Computer als 16- bzw. 32-Bit-Zahlen eingegeben wurden. Ich glaube, Sie würden diese verwenden, wenn Sie eine Zahl von 16 oder 32 Bit garantieren müssen, da verschiedene Systeme nicht immer ein @ darstelleint als 32 Bit oder einshort als 16 Bit (Ist diese Annahme richtig? Ich finde gemischte Antworten, wenn ich online schaue.).

Meine Frage ist, wie ich eine Funktion wie @ verwenden würscanf, um Eingaben von einem Benutzer mit einem @ zu erhaltint16_t oder einint32_t oder eine der anderen typisierten Zahlentypen, wenn ich sie tatsächlich 16 Bit oder 32 Bit oder was auch immer benötigen? Gibt es eine Art speziellen String-Modifikator? Normalerweise, wenn ich ein @ bekommen wollint von einem Benutzer ohne Rücksicht darauf, wie groß es tatsächlich dargestellt wird, wie ich so etwas schreiben würde

scanf("%d", &int);

Dies funktioniert, wenn ich ein @ übergeint32_t aber ich nehme an, es liegt nur daran, dass einint auf meinem System ist 32-Bit und es gibt mir keine 32-Bit-Nummer, stattdessen gibt es mir nur einint. Wie gehe ich vor, um eine garantierte 32-Bit-Zahl zu erhalten? Ich habe @ angeschadiese Seite mit String-Modifikatoren und ein paar andere Orte, aber ich habe keine Erwähnung dieser typisierten Zahlentypen gefunden.

Bearbeiten Seit ich eine Antwort auf meine Frage erhalten habe, habe ich ein bisschen gegoogelt und @ gefundDie. Ich habe es auch als Referenz beigefügt.

uppercase hexadecimal printf format for uintptr_t

#define SCNd16   "d"
decimal scanf format for int16_t

#define SCNd32   "ld"
decimal scanf format for int32_t

#define SCNd8   "hhd"
decimal scanf format for int8_t

#define SCNdFAST16   "d"
decimal scanf format for int_fast16_t

#define SCNdFAST32   "ld"
decimal scanf format for int_fast32_t

#define SCNdFAST8   "hhd"
decimal scanf format for int_fast8_t

#define SCNdLEAST16   "d"
decimal scanf format for int_least16_t

#define SCNdLEAST32   "ld"
decimal scanf format for int_least32_t

#define SCNdLEAST8   "hhd"
decimal scanf format for int_least8_t

#define SCNdPTR   SCNd16
decimal scanf format for intptr_t

#define SCNi16   "i"
generic-integer scanf format for int16_t

#define SCNi32   "li"
generic-integer scanf format for int32_t

#define SCNi8   "hhi"
generic-integer scanf format for int8_t

#define SCNiFAST16   "i"
generic-integer scanf format for int_fast16_t

#define SCNiFAST32   "li"
generic-integer scanf format for int_fast32_t

#define SCNiFAST8   "hhi"
generic-integer scanf format for int_fast8_t

#define SCNiLEAST16   "i"
generic-integer scanf format for int_least16_t

#define SCNiLEAST32   "li"
generic-integer scanf format for int_least32_t

#define SCNiLEAST8   "hhi"
generic-integer scanf format for int_least8_t

#define SCNiPTR   SCNi16
generic-integer scanf format for intptr_t

#define SCNo16   "o"
octal scanf format for uint16_t

#define SCNo32   "lo"
octal scanf format for uint32_t

#define SCNo8   "hho"
octal scanf format for uint8_t

#define SCNoFAST16   "o"
octal scanf format for uint_fast16_t

#define SCNoFAST32   "lo"
octal scanf format for uint_fast32_t

#define SCNoFAST8   "hho"
octal scanf format for uint_fast8_t

#define SCNoLEAST16   "o"
octal scanf format for uint_least16_t

#define SCNoLEAST32   "lo"
octal scanf format for uint_least32_t

#define SCNoLEAST8   "hho"
octal scanf format for uint_least8_t

#define SCNoPTR   SCNo16
octal scanf format for uintptr_t

#define SCNu16   "u"
decimal scanf format for uint16_t

#define SCNu32   "lu"
decimal scanf format for uint32_t

#define SCNu8   "hhu"
decimal scanf format for uint8_t

#define SCNuFAST16   "u"
decimal scanf format for uint_fast16_t

#define SCNuFAST32   "lu"
decimal scanf format for uint_fast32_t

#define SCNuFAST8   "hhu"
decimal scanf format for uint_fast8_t

#define SCNuLEAST16   "u"
decimal scanf format for uint_least16_t

#define SCNuLEAST32   "lu"
decimal scanf format for uint_least32_t

#define SCNuLEAST8   "hhu"
decimal scanf format for uint_least8_t

#define SCNuPTR   SCNu16
decimal scanf format for uintptr_t

#define SCNx16   "x"
hexadecimal scanf format for uint16_t

#define SCNx32   "lx"
hexadecimal scanf format for uint32_t

#define SCNx8   "hhx"
hexadecimal scanf format for uint8_t

#define SCNxFAST16   "x"
hexadecimal scanf format for uint_fast16_t

#define SCNxFAST32   "lx"
hexadecimal scanf format for uint_fast32_t

#define SCNxFAST8   "hhx"
hexadecimal scanf format for uint_fast8_t

#define SCNxLEAST16   "x"
hexadecimal scanf format for uint_least16_t

#define SCNxLEAST32   "lx"
hexadecimal scanf format for uint_least32_t

#define SCNxLEAST8   "hhx"
hexadecimal scanf format for uint_least8_t

#define SCNxPTR   SCNx16
hexadecimal scanf format for uintptr_t

Antworten auf die Frage(1)

Ihre Antwort auf die Frage