我有十六进制值0x5a800000000b
,我正在尝试在 C 中获取 printf 语句以将其打印到控制台。
到目前为止(因为我在 C 中没用)我能够使用以下语法打印“b”:
printf("Hex value%x\n", value);
该值存储在整数类型 U32 中,但在尝试了 %llx、%lx 的所有不同组合后,我只是不断收到编译器警告。
我猜我的 printf 语法错误,但我似乎找不到正确的 % 选项,有人可以帮帮我吗?
谢谢
这不是问题printf
。
问题是 32 位变量不能保存该值0x5a800000000b
。32 位只能保存 8 个十六进制数字:0x0000000b。因此b
输出。
要存储这么大的值,您应该使用 64 位变量。
long long value = 0x5a800000000bLL
L
还要注意末尾的双倍。它告诉编译器该常量也是一个long long
.
然后你可以%llx
在printf
格式字符串中使用。
这些类型有一些预定义的宏:
#include <inttypes.h>
int64_t PRId64. PRIi64
int32_t PRId32, PRIi32
int16_t PRId16, PRIi16
int8_t PRId8, PRIi8
例如:
printf("%"PRId32"\n", my32Int);
值 0x5a800000000b 超过 32 位,因此您必须使用long
.
long value = 0x5a800000000bl;
printf("Hex value%lx\n", value);
请注意,十六进制常量应以l
, 结尾。