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

时间:2015-08-20 07:50:36

标签: c gcc 64-bit

使用以下代码,我尝试使用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;
}

输出:

val = 0x90abcdef

预期产出:

val = 0x1234567890abcdef

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

2 个答案:

答案 0 :(得分:34)

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

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

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

答案 1 :(得分:5)

修改:改为使用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 < / p>