如何在C中将double值转换为char数组?
double a=2.132;
char arr[8];
有没有办法在标准C中这样做?任何人都可以提供任何解决方案吗?
答案 0 :(得分:11)
如果您要存储双重数据,而不是可读表示,那么:
#include <string.h>
double a=2.132;
char arr[sizeof(a)];
memcpy(arr,&a,sizeof(a));
答案 1 :(得分: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;
}
答案 2 :(得分:3)
如果有人看到这个,你也可以试试sprintf:
示例:
char charray[200];
double num = 11.1111111111111;
sprintf(charray, "%2.13f", num);
答案 3 :(得分:1)
如果您要问的是如何找出哪些字节组成了内存中的double值,请尝试以下操作:
double a=2.132;
double darr[1] = { a };
char *arr = (char*) darr;
虽然你可能想要unsigned char,而不是char
答案 4 :(得分:1)
虽然我看到了一些答案,但我想你会看到代码 - 我会使用snprintf,尽管你可能更喜欢更安全的形式:
snprintf(arr, 8, "%2.4f", a);
更多信息:http://msdn.microsoft.com/en-us/library/2ts7cx93(VS.71).aspx
答案 5 :(得分:-2)
双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