0

我有十六进制值0x5a800000000b,我正在尝试在 C 中获取 printf 语句以将其打印到控制台。

到目前为止(因为我在 C 中没用)我能够使用以下语法打印“b”:

printf("Hex value%x\n", value);

该值存储在整数类型 U32 中,但在尝试了 %llx、%lx 的所有不同组合后,我只是不断收到编译器警告。

我猜我的 printf 语法错误,但我似乎找不到正确的 % 选项,有人可以帮帮我吗?

谢谢

4

3 回答 3

6

这不是问题printf

问题是 32 位变量不能保存该值0x5a800000000b。32 位只能保存 8 个十六进制数字:0x0000000b。因此b输出。

要存储这么大的值,您应该使用 64 位变量。

long long value = 0x5a800000000bLL

L还要注意末尾的双倍。它告诉编译器该常量也是一个long long.

然后你可以%llxprintf格式字符串中使用。

于 2013-01-16T10:35:38.667 回答
4

这些类型有一些预定义的宏:

#include <inttypes.h>
int64_t PRId64. PRIi64
int32_t PRId32, PRIi32
int16_t PRId16, PRIi16
int8_t PRId8, PRIi8

例如:

printf("%"PRId32"\n", my32Int);
于 2013-01-16T10:36:30.613 回答
0

值 0x5a800000000b 超过 32 位,因此您必须使用long.

long value = 0x5a800000000bl;
printf("Hex value%lx\n", value);

请注意,十六进制常量应以l, 结尾。

于 2013-01-16T10:35:51.987 回答