使用以下代码,我尝试使用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
说明符似乎是错误的。
答案 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 long
:PRIx64
另见this stackoverflow answer < / p>