首页 文章

如何将64位整数打印为十六进制? [重复]

提问于
浏览
16

这个问题在这里已有答案:

使用以下代码,我尝试使用 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位值作为十六进制整数?在这种情况下, x 说明符似乎是错误的 .

2 回答

  • 4

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

    尝试使用 %lx%llx . 要获得更多可移植性,请包含 inttypes.h 并使用 PRIx64 宏 .

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

  • 28

    编辑:改为使用 printf("val = 0x%" PRIx64 "\n", val); . 请尝试使用 printf("val = 0x%llx\n", val); . 见printf manpage

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

    编辑:更好的是@M_Oehm写的:有一个特定的宏,因为 unit64_t 并不总是 unsigned long longPRIx64 另见this stackoverflow answer

相关问题