Convert double value to a char array in C

后端 未结 6 703
陌清茗
陌清茗 2021-01-05 02:36

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

相关标签:
6条回答
  • 2021-01-05 02:58

    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;
    }
    
    0 讨论(0)
  • 2021-01-05 03:08

    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));
    
    0 讨论(0)
  • 2021-01-05 03:14

    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
    
    0 讨论(0)
  • 2021-01-05 03:15

    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

    0 讨论(0)
  • 2021-01-05 03:16

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

    Example:

    char charray[200];
    double num = 11.1111111111111;
    
    sprintf(charray, "%2.13f", num);
    
    0 讨论(0)
  • 2021-01-05 03:18

    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

    0 讨论(0)
提交回复
热议问题