9

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?

2
  • 6
    I'm not sure if you mean you want the string "2.132" or if you mean something more nefarious? Commented Sep 18, 2011 at 15:10
  • 1
    i want to store double a value in to the char array as characters. Commented Sep 18, 2011 at 15:14

6 Answers 6

14

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)); 
Sign up to request clarification or add additional context in comments.

3 Comments

Your parentheses around 'a' after the sizeof operator are not needed. (Parentheses are needed when the argument is a a type name rather than an entity.)
More readable for me. I do even tend to write " if ( (good) && (!best) ) ...". But you're right.
@vmatyi I don't think you want to dereference the array as arrays are already pointers.
4

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; } 

Comments

3

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

Example:

char charray[200]; double num = 11.1111111111111; sprintf(charray, "%2.13f", num); 

Comments

2

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

Comments

1

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

Comments

-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 

1 Comment

This question is about C. Your answer doesn't look like C.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.