我有十六进制值0x5a800000000b
,我试图在C中获得printf语句以将其打印到控制台。
到目前为止(因为我在C中没用),我能够得到'b'打印,使用语法:
printf("Hex value%xn", value);
该值存储在整数类型U32中,但在尝试了%llx, %lx的所有不同组合后,我只是不断得到编译器警告。
我猜我得到printf语法错误,但我似乎找不到正确的%选项,有人能帮我吗?
谢谢
printf
没有问题。
问题是32位变量不能保存值0x5a800000000b
。32位只能容纳8位十六进制数字:0x0000000b。因此输出上的b
。
要存储这么大的值,应该使用64位变量。
long long value = 0x5a800000000bLL
还要注意末尾的双L
。它告诉编译器该常量也是long long
。
那么您可以在printf
格式字符串中使用%llx
对于这些类型有一些预定义的宏:
#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%lxn", value);
注意十六进制常量应该以l
结尾,