这个问题在这里已有答案:
使用以下代码,我尝试使用 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 回答
编译器发出的警告告诉您,您的格式说明符与您传递给它的数据类型不匹配 .
尝试使用
%lx
或%llx
. 要获得更多可移植性,请包含inttypes.h
并使用PRIx64
宏 .例如:
printf("val = 0x%" PRIx64 "\n", val);
(注意它是字符串连接)编辑:改为使用
printf("val = 0x%" PRIx64 "\n", val);
. 请尝试使用printf("val = 0x%llx\n", val);
. 见printf manpage:编辑:更好的是@M_Oehm写的:有一个特定的宏,因为
unit64_t
并不总是unsigned long long
:PRIx64
另见this stackoverflow answer