在C语言中将双精度浮点数转换为字符数组

9
如何在C语言中将double值转换为字符数组?
double a=2.132;
char arr[8];

有没有标准C的方法来实现这个?有人能提供解决方案吗?

6
我不确定你的意思是想要字符串"2.132"还是指的更阴险的事情? - Alan Moore
1
我想将双精度值存储为字符数组中的字符。 - Hashan
6个回答

14

如果你要存储双精度数据本身而非可读的表示方式,那么:

#include <string.h>

double a=2.132;
char arr[sizeof(a)];
memcpy(arr,&a,sizeof(a));

不需要在sizeof运算符后面的'a'周围加括号。(当参数是类型名称而不是实体时,需要使用括号。) - James Waldby - jwpat7
更易读的代码对我来说更好。我甚至倾向于写成“if ((good) && (!best))...”。但你是对的。 - vmatyi
@vmatyi,我认为您不想取消引用数组,因为数组已经是指针。 - MrMas

4

要将数字转换为易读的字符形式,请使用snprintf(),如下面的代码。

要访问double的字节,请使用union。例如,union u { double d; char arr[8]; }

但是,根据您添加的评论,也许您的意思是将数字从字符转换为double。请参见以下代码中的atof()调用。该代码生成以下4个输出行:

u.d = 2.132000     u.arr =  75 ffffff93 18 04 56 0e 01 40
res = 2.13200000
u.d = 37.456700     u.arr =  ffffffa6 0a 46 25 75 ffffffba 42 40
res = 37.45670000

代码:

#include <stdio.h>
#include <stdlib.h>
union MyUnion { char arr[8];  double d; };

void printUnion (union MyUnion u) {
  int i;
  enum { LEN=40 };
  char res[LEN];
  printf ("u.d = %f     u.arr = ", u.d);
  for (i=0; i<8; ++i)
    printf (" %02x", u.arr[i]);
  printf ("\n");
  snprintf (res, LEN, "%4.8f", u.d);
  printf ("res = %s\n", res);
}
int main(void) {
  union MyUnion mu = { .d=2.132 };
  printUnion (mu);
  mu.d = atof ("37.4567");
  printUnion (mu);
  return 0;
}

3
如果有人看到这个,你也可以尝试使用sprintf函数:
举例来说:
char charray[200];
double num = 11.1111111111111;

sprintf(charray, "%2.13f", num);

2

虽然我看到了一些答案,但我想您可能希望看到代码 - 我将使用snprintf,尽管您可能更喜欢更安全的形式:

snprintf(arr, 8, "%2.4f", a);

更多信息请参见:http://msdn.microsoft.com/en-us/library/2ts7cx93(VS.71).aspx

该链接提供有关IT技术的详细信息。

1
如果您想知道如何找出内存中组成双精度浮点数的字节,请尝试以下方法:
double a=2.132;
double darr[1] = { a };
char *arr = (char*) darr;

虽然你可能想要无符号字符,而不是字符


-2

double b=222.215;

        String bb=""+b;

        char[] tab=new char[bb.length()];

        for(int m=0;m<bb.length();m++)
        {
            tab[i]=bb.charAt(m);
        }//un tableau mtn qui contient notre resultat dans un tableua de char

4
这个问题涉及到C语言。你的回答看起来不像是用C语言写的。 - Pang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接