次のコードでは、printf()
を使用して_unit64_t
_変数の値を出力しようとしています。 gccでコードをコンパイルすると、次の警告が返されます。
警告:形式 '%x'はタイプ 'unsigned int'の引数を必要としますが、引数2はタイプ 'uint64_t' [-Wformat =]
コード:
_#include <stdio.h>
#include <stdint.h>
int main ()
{
uint64_t val = 0x1234567890abcdef;
printf("val = 0x%x\n", val);
return 0;
}
_
出力:
_val = 0x90abcdef
_
期待される出力:
_val = 0x1234567890abcdef
_
printf()
を使用して64ビット値を16進整数として出力するにはどうすればよいですか?この場合、x
指定子は間違っているようです。
コンパイラからの警告は、フォーマット指定子が渡されるデータ型と一致しないことを示しています。
_%lx
_または_%llx
_を使用してみてください。移植性を高めるには、_inttypes.h
_を含め、_PRIx64
_マクロを使用します。
例:printf("val = 0x%" PRIx64 "\n", val);
(文字列の連結であることに注意してください)
編集:代わりにprintf("val = 0x%" PRIx64 "\n", val);
を使用します。
printf("val = 0x%llx\n", val);
を試してください。 printf manpage を参照してください:
ll(エルエル)。次の整数変換は、long long intまたはunsigned long long int引数に対応します。または、次のn変換は、long long int引数へのポインターに対応します。
編集:@M_Oehmが書いたものはさらに良いです。そのための特定のマクロがあります。unit64_t
は常にunsigned long long
:PRIx64
も参照してください このstackoverflow answer