我理解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