web-dev-qa-db-ja.com

Windows上の符号なし__int64のprintf形式

ULONGLONG値(unsigned __int64)。 printfで使用する形式は何ですか? %llu別の質問ですが、彼らはそれがLinux専用だと言っています。

ご協力いただきありがとうございます。

20
Virus721

Googleを使用して「Visual Studio printf unsigned __int64」を検索すると、最初の結果として このページ が生成され、接頭辞I64ので、フォーマット指定子は%I64u

32

%lluunsigned long longを印刷するための標準的な方法です。Linuxだけでなく、実際にはC99にあります。したがって、実際の問題は、Visual Studioではなく、C99互換のコンパイラを使用することです。

C99 7.19.6 フォーマットされた入出力関数

ll(ell-ell)次のd、i、o、u、x、またはX変換指定子がlong long intまたはunsigned long long int引数に適用されることを指定します。または、後続のn変換指定子がlong long int引数へのポインターに適用されること。

9
Yu Hao

PRIu64 標準Cライブラリから指定された形式。これは、さまざまなアーキテクチャにわたる符号なし64ビット整数の形式指定子をユーザーに提供するために設計されました。

次に例を示します(C++ではなくCで)。

#include <stdint.h>   /* For uint64_t */
#include <inttypes.h> /* For PRIu64 */
#include <stdio.h>    /* For printf */
#include <stdlib.h>   /* For exit status */

int main()
{
    uint64_t n = 1986;
    printf("And the winning number is.... %" PRIu64 "!\n", n);
    return EXIT_SUCCESS;
}
4
user405725

Printfには、コンパイラに応じてunsigned long longの異なる書式指定子があります。%llu%Luを見てきました。一般的には、代わりにstd::coutなどを使用することをお勧めします。

1

HEX出力の回避策は次のとおりです。

printf("%08X%08X", static_cast<UINT32>((u64>>32)&0xFFFFFFFF), static_cast<UINT32>(u64)&0xFFFFFFFF));
0
Neil Kirk