我有这个十六进制数:
FFFFFFFFFFFF
我需要保存它,所以我用了double
double a=0xffffffffffff;
但我需要打印它,但我不知道如何打印。每次我使用 %f
、%d
、%x
时,它都不会打印它的值;我只需要打印 ffffffffffff
。我的代码:
int main()
{
double a=0xffffffffffff;
printf("%x\n",a);
printf("%d\n",a);
printf("%X\n",a);
printf("%f\n",a);
return 0;
}
唯一的真值是%f
;返回十六进制的十进制值——它返回这个:
ffffffe0
-32
FFFFFFE0
281474976710655.000000
有了这个,我需要从十六进制更改为字符串,以比较它,因为我在字符串中也有 FFFFFFFFFFFF,我需要比较两者。如果我不能 printf
它,sprintf
也不会工作。
最佳答案
这是一个整数,而且是一个长整数。不要使用 double
来存储这样的值,那是 float 。
只需使用:
unsigned long long temp = 0xffffffffffffull;
您有 12 个十六进制数字,因此您的数字至少需要 12 * 4 = 48 位。大多数平台应该有一个 64 位的 unsigned long long
,这应该没问题。
如果你的编译器足够支持 C99,你可以这样做:
#include <stdint.h>
然后按照评论中的建议使用 uint_least64_t
类型。在 Linux 中,我猜你使用的是 GCC,所以你应该没问题,你可能需要指定你打算将代码编译为 C99(使用 -std=c99
)。
要打印它,请使用:
printf("temp=%llx\n", temp);
另请注意,值本身不是十六进制的,但您可以 将其打印为十六进制。值只是一个值,基数仅在转换为文本或从文本转换时才重要,即数字的外部表示。在二进制计算机内部,数字以二进制形式存储。
关于c - 如何在 C 中打印十六进制 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16441510/