在 C 中将 double 值转换为 char 数组

发布于 2024-12-05 08:12:27 字数 131 浏览 0 评论 0原文

如何在 C 中将 double 值转换为 char 数组?

double a=2.132;
char arr[8];

在标准C中有什么办法可以做到这一点吗?谁能给出任何解决方案吗?

How do I convert double value to a char array in C?

double a=2.132;
char arr[8];

Is there any way to do this in standard C? Can anyone give any solution?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

命比纸薄 2024-12-12 08:12:27

如果您要存储双数据,而不是可读表示,那么:

#include <string.h>

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

If you are about to store the double DATA, not the readable representation, then:

#include <string.h>

double a=2.132;
char arr[sizeof(a)];
memcpy(arr,&a,sizeof(a));
宛菡 2024-12-12 08:12:27

要以人类可读的形式表示数字的字符串,请使用 snprintf(),如下面的代码所示。

要访问双精度数的字节,请使用联合。例如,union u { double d;字符数组[8];但是

,从您添加的评论来看,也许您的意思是将数字从字符转换为双精度。请参阅下面代码中的 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;
}

To make a character string representing the number in human-readable form, use snprintf(), like in code below.

To access the bytes of the double, use a union. For example, union u { double d; char arr[8]; }

However, from your added comment, perhaps you mean to convert a number from characters to double. See the atof() call in code below. The code produces the following 4 output lines:

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

Code:

#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;
}
傲鸠 2024-12-12 08:12:27

如果有人看到这个,你也可以尝试 sprintf:

示例:

char charray[200];
double num = 11.1111111111111;

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

In case someone looks at this, you can also try sprintf:

Example:

char charray[200];
double num = 11.1111111111111;

sprintf(charray, "%2.13f", num);
脱离于你 2024-12-12 08:12:27

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

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

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

Although I see some answers, I imagine you'd like to see code -- I'll just use snprintf although you might prefer a more secure form:

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

more here: http://msdn.microsoft.com/en-us/library/2ts7cx93(VS.71).aspx

贵在坚持 2024-12-12 08:12:27

如果您要问的是如何找出内存中的 double 值由哪些字节组成,请尝试以下操作:

double a=2.132;
double darr[1] = { a };
char *arr = (char*) darr;

尽管您可能想要 unsigned char,而不是 char

If what you are asking is how to find out what bytes make up the double value in memory, try this:

double a=2.132;
double darr[1] = { a };
char *arr = (char*) darr;

although you probably want unsigned char, not char

千と千尋 2024-12-12 08:12:27

双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

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文