0

私は16進値を持っており0x5a800000000b、Cでprintfステートメントを取得してコンソールに出力しようとしています。

これまでのところ (私は C では役に立たないため)、次の構文を使用して 'b' を印刷することができます。

printf("Hex value%x\n", value);

値は整数型 U32 に格納されていますが、%llx、%lx のさまざまな組み合わせをすべて試した後、コンパイラの警告が表示され続けます。

printf 構文が間違っていると思いますが、正しい % オプションが見つからないようです。誰か助けてもらえますか?

ありがとう

4

3 に答える 3

6

の問題ではありませんprintf

問題は、32 ビット変数が値を保持できないことです0x5a800000000b。32 ビットは 8 桁の 16 進数 (0x0000000b) しか保持できません。したがって、bオン出力です。

このような大きな値を格納するには、64 ビット変数を使用する必要があります。

long long value = 0x5a800000000bLL

L末尾の double にも注意してください。定数も . であることをコンパイラに伝えますlong long

%llx次に、printfフォーマット文字列で使用できます。

于 2013-01-16T10:35:38.667 に答える
4

これらのタイプには、定義済みのマクロがいくつかあります。

#include <inttypes.h>
int64_t PRId64. PRIi64
int32_t PRId32, PRIi32
int16_t PRId16, PRIi16
int8_t PRId8, PRIi8

例えば:

printf("%"PRId32"\n", my32Int);
于 2013-01-16T10:36:30.613 に答える
0

値 0x5a800000000b は 32 ビットを超えるため、long.

long value = 0x5a800000000bl;
printf("Hex value%lx\n", value);

16 進定数は , で終わる必要があることに注意してくださいl

于 2013-01-16T10:35:51.987 に答える