如何将64位整数打印为十六进制?

ser*_*gej 23 c 64-bit gcc

使用以下代码,我尝试使用输出unit64_t变量的值printf().使用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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

val = 0x90abcdef
Run Code Online (Sandbox Code Playgroud)

预期产量:

val = 0x1234567890abcdef
Run Code Online (Sandbox Code Playgroud)

如何使用printf()?输出64位值作为十六进制整数?x在这种情况下,说明符似乎是错误的.

tan*_*grs 38

编译器发出的警告告诉您,您的格式说明符与您传递给它的数据类型不匹配.

尝试使用%lx%llx.为了更具可移植性,请包含inttypes.h并使用PRIx64宏.

例如:( printf("val = 0x%" PRIx64 "\n", val);注意它是字符串连接)

  • 也可以使用 `%016llx` 来确保输出的 `padding` 为零(在开头)以达到 `16` 个字符的 `minimum field width` (3认同)
  • 根据记录,`PRIx64` 被`#define`d 为`"ll" "x"` (2认同)

Sup*_*kus 5

编辑:改为使用printf("val = 0x%" PRIx64 "\n", val);

尝试printf("val = 0x%llx\n", val);。请参见printf手册页

ll(ell-ell)。后面的整数转换对应于long long int或unsigned long long int参数,或者后面的n转换对应于long long int参数的指针。

编辑:更好的是@M_Oehm写道:有一个特定的宏,因为unit64_t它并不总是a unsigned long longPRIx64另请参见此stackoverflow答案