我理解int16_t
或int32_t
在C中的方式是它们在您的计算机上分别被键入16位和32位数字。我相信你会使用这些,当你需要保证一个数字是16或32位,因为不同的系统并不总是代表一个int
32位或short
16位(这个假设是否正确?我找到混合的答案,当我在网上)。如何使用int16_t或int32_t与scanf函数
我的问题是我怎么会用像scanf
的功能从用户获取输入与int16_t
或int32_t
或任何其他typedef操作数类型的,当我要求他们实际上是16位或32位或什么?是否有某种特殊的字符串修饰符?通常情况下,如果我想从用户的int
,而无需关心它是如何大的其实是代表我会写这样的事情
scanf("%d", &int);
如果我通过在int32_t
,但这个工作我认为这仅仅是因为一个我的系统上的int
是32位,它并没有专门给我一个32位数字,而只是给我一个int
。如何获取保证为32位的数字?我看过this page of string modifiers和其他一些地方,但没有发现这些typedefed数字类型。
编辑:既然收到我的问题的答案,我已经做了一些谷歌搜索,发现this。我将它列入下面以供参考。
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
为'int16_t'使用宏:'scanf函数( “%” SCNd16,与VAR)','为int32_t ':'scanf(“%”SCNd32,&var)'。 '#include' –
BLUEPIXY
2014-10-28 21:08:09
@PaulGriffiths这很接近,但不是实际的重复。微妙的区别在于'printf'应该使用'PRI *'宏,而'scanf'应该使用'SCN *'宏。 – cpburnz 2014-10-28 21:12:37
请注意,以上是针对avr-gcc(微控制器的gcc版本)。您平台的具体定义可能会有所不同。在Linux上,您可以在'/ usr/include/inttypes.h'中找到SCN ...宏。 – 2017-09-27 00:17:37