Конвертировать двойное значение в массив символов в C - PullRequest
7 голосов
/ 18 сентября 2011

Как мне преобразовать двойное значение в массив символов в C?

double a=2.132;
char arr[8];

Есть ли способ сделать это в стандартном C?Кто-нибудь может дать какое-нибудь решение?

Ответы [ 6 ]

11 голосов
/ 18 сентября 2011

Если вы собираетесь хранить двойные данные, а не читаемое представление, тогда:

#include <string.h>

double a=2.132;
char arr[sizeof(a)];
memcpy(arr,&a,sizeof(a));
4 голосов
/ 18 сентября 2011

Чтобы создать символьную строку, представляющую число в удобочитаемой форме, используйте snprintf (), как показано в коде ниже.

Чтобы получить доступ к байтам двойного числа, используйте объединение.Например, союз u {double d;char arr [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;
}
3 голосов
/ 09 августа 2013

Если кто-то смотрит на это, вы можете попробовать sprintf:

Пример:

char charray[200];
double num = 11.1111111111111;

sprintf(charray, "%2.13f", num);
1 голос
/ 18 сентября 2011

Хотя я вижу некоторые ответы, я думаю, что вы хотели бы увидеть код - я просто использую snprintf, хотя вы можете предпочесть более безопасную форму:

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

больше здесь: http://msdn.microsoft.com/en-us/library/2ts7cx93(VS.71).aspx

1 голос
/ 18 сентября 2011

Если вы спрашиваете, как узнать, какие байты составляют двойное значение в памяти, попробуйте это:

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

, хотя вы, вероятно, хотите использовать unsigned char, а не char

0 голосов
/ 16 ноября 2015

двойной 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
...