问题描述
我正在处理32位系统.当我尝试在单个printf中打印多个64位值时,它不能再打印任何进一步的(即2nd,3rd,...)变量值.
示例:
uint64_t a = 0x12345678; uint64_t b = 0x87654321; uint64_t c = 0x11111111; printf("a is %llx & b is %llx & c is %llx",a,b,c);
为什么此printf不打印所有值?
我正在修改我的问题
printf("a is %x & b is %llx & c is %llx",a,b,c);
通过这样做是:A IS IS 12345678&B IS 876543210000000000&C IS 1111111100000000
如果我不正确地打印A的值,那么为什么其他人的值是Gona更改?
?推荐答案
您需要使用正确的格式:
#include <stdio.h> #include <stdlib.h> #include <inttypes.h> int main(void) { uint64_t a = 0x12345678; uint64_t b = 0x87654321; uint64_t c = 0x11111111; printf("a is %#" PRIx64 " & b is %#" PRIx64 " & c is %#" PRIx64 "\n", a, b, c); return EXIT_SUCCESS; }
输出:
a is 0x12345678 & b is 0x87654321 & c is 0x11111111
其他推荐答案
您应该使用<inttypes.h>
中定义的宏printf("a is %"PRIx64" & b is %"PRIx64" & c is %"PRIx64"\n",a,b,c);
这很丑陋,但它是可移植的.这是在C99中引入的,因此您需要一个符合C99的编译器.
其他推荐答案
它在我的计算机上全部打印它们,但是有三个编译时间警告,因为%llx期望A long long unsigned int.
您确定需要使用64位类型吗?您的三个六角形都只有32位.也许您只能使用32位,然后做:
unsigned int a = 0x12345678; unsigned int b = 0x87654321; unsigned int c = 0x11111111; printf("a is %x & b is %x & c is %x",a,b,c);
(或使用相当于32位无符号int的stdint)
除非您需要它们是64位,以便以后可以向它们添加更多位.