如何将64位整数打印为hex?
使用以下代码,我尝试使用printf()
输出unit64_t
变量的值。 使用gcc编译代码,返回以下警告:
警告:格式’%x’需要’unsigned int’类型的参数,但参数2的类型为’uint64_t'[ – Wformat =]
代码:
#include #include int main () { uint64_t val = 0x1234567890abcdef; printf("val = 0x%x\n", val); return 0; }
输出:
val = 0x90abcdef
预期产量:
val = 0x1234567890abcdef
如何使用printf()
将64位值输出为hex整数? 在这种情况下, x
说明符似乎是错误的。
编译器发出的警告告诉您,您的格式说明符与您传递给它的数据类型不匹配。
尝试使用%lx
或%llx
。 要获得更多可移植性,请包含inttypes.h
并使用PRIx64
宏。
例如: printf("val = 0x%" PRIx64 "\n", val);
(注意它是字符串连接)
编辑:使用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
并不总是一个unsigned long long
: PRIx64
也见这个stackoverflow答案