整数変数がある場合、書式指定子%dを使用して、以下に示すようにsscanf
を使用できます。
sscanf (line, "Value of integer: %d\n", &my_integer);
uint8_t
、uint16_t
、uint32_t
、およびuint64_t
のフォーマット指定子はどこにありますか?
uint64_tにはおそらく%luがあります。
これらは、<inttypes.h>
でマクロとして宣言されています:SCNd8、SCNd16、SCNd32、SCNd64。例(int32_tの場合):
sscanf (line, "Value of integer: %" SCNd32 "\n", &my_integer);
それらの形式は、PRI(printfの場合)/ SCN(スキャンの場合)、o、u、x、X d、i、対応する指定子の場合、なし、LEAST、FAST、MAX、サイズ(明らかにMAXのサイズはありません)他の例:PRIo8、PRIuMAX、SCNoFAST16。
編集:ところで 関連する質問 その方法が使用された理由を尋ねました。答えが面白いと思うかもしれません。
他の人が言ったように、<stdint.h>
書式マクロを定義するヘッダー。ただし、C++では、__STDC_FORMAT_MACROS
含める前。 stdint.hから:
/* The ISO C99 standard specifies that these macros must only be
defined if explicitly requested. */
#if !defined __cplusplus || defined __STDC_FORMAT_MACROS
7.19.6 Formatted input/output functions of ISO/IEC 9899:TC2によると、そのような形式指定子はありません(C++ 2003には疑わしい) 。 C99のinttypes.h
で使用できる#define-macrosがいくつかありますが、cinttypes
およびinttypes.h
は現在の標準の一部ではありません。もちろん、固定サイズの整数型も非標準です。
とにかく、代わりにストリームを使用して真剣にお勧めします:
<any_type> x;
f >> x;
そして行われます。例えば。:
std::stringstream ss;
uint32_t u;
std::cin >> u;
これには、将来一度変数の型を変更しても、微妙なバグや未定義の動作のカスケードが発生しないという利点があります。
Cでは、ヘッダーは<inttypes.h>
、およびSCNX8、SCNd16などの形式。
同じヘッダーがおそらくC++でも機能します。
uint64_t
(typedef unsigned long long int)を読み取るための正しい形式は、scanf
ではなくsscanf
で、"%" SCNu64
であり、印刷の場合もSCNu64
です。コードでは、たとえばmy_integer変数を読み取り、scanf ("Value of integer:%" SCNu64, & my_integer);
を実行し、printfを使用して同じことを記述します。