web-dev-qa-db-ja.com

uint16_tをprintf()するにはどうすればよいですか?

Uint16_tを印刷するには、printf()を使用する必要があります。このSO回答( int32_tおよびuint16_t変数の値を出力する方法は? )は、inttypes.hを使用する必要があることを示しています。

ただし、組み込みシステムで作業しており、inttypes.hは使用できません。 uint16_tのフォーマット指定子が使用できない場合、uint16_tを印刷するにはどうすればよいですか?

16
user9993

Inttypes.hのスタイルを使用する必要がありますが、シンボルは自分で定義してください。例えば:

#define PRIu8 "hu"
#define PRId8 "hd"
#define PRIx8 "hx"
#define PRIu16 "hu"
#define PRId16 "hd"
#define PRIx16 "hx"
#define PRIu32 "u"
#define PRId32 "d"
#define PRIx32 "x"
#define PRIu64 "llu" // or possibly "lu"
#define PRId64 "lld" // or possibly "ld"
#define PRIx64 "llx" // or possibly "lx"

あなたのマシンのためにそれらを理解し、それらを使用してください。 inttypes.hで必要なものを確認してください。

これにより、コードの移植性が高まります。 70年代後半から組み込みシステムの仕事をしています。私を信じてください:移植性は重要です。

18
Jeff Learman

明白な方法は次のとおりです。

printf("%u\n", (unsigned int)x);

Unsigned intは少なくとも16ビットであることが保証されているため、これは不可逆変換ではありません。

14
M.M

short intは少なくとも16ビット長の最小値なので、値をunsigned short intに変換し、%huで出力します。

7
StenSoft