c - 如何在 C 中打印十六进制 double ?

标签 c linux unix hex

我有这个十六进制数:

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/

相关文章:

java - "long x = 1/2"等于 1 还是 0,为什么?

java - 用于创建工程图的库/语言

linux - Debian 上的 pgadmin 黑色背景字体

linux - BASH - while 循环不重新检查文件

bash - 打印所有环境变量但跳过多行变量

c++ - 找到破坏编译的#define

c++ - opengl 库在哪里存储在 ubuntu : i need this to mention in my make file 上

shell - shell 脚本中 "#!/bin/sh"的用途/含义是什么?

c - 默认情况下,赋值使整数指针不启用强制转换

c - SO_KEEPALIVE 和轮询