【问题标题】:Convert an array of double value in to a character buffer将 double 值数组转换为字符缓冲区
【发布时间】:2016-05-25 13:14:40
【问题描述】:

我需要将一个包含 4 个 double 值的数组发送到一个大小为 8 字节的字符缓冲区中,并且还想从字符数组中提取该值到 double 值以供其使用。

我正在尝试使用下面的代码,但没有得到正确的输出,因为 char str 的大小为 8 字节太小,无法存储 4 个双精度值!!

例如:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
    {
     char str[8]={'\0'};
     double x=-10.456678,p=12.678906,q=80.8956876,r=360.67,y,z,h,k;
     sprintf(&str[0],"%2.6f",x);
     sprintf(&str[1],"%2.6f",p);
     sprintf(&str[2],"%2.6f",q);
     sprintf(&str[3],%3.4f",r);
     //Extracting the same from str
     y=atof((char *)&str[0]);
     z=atof((char *)&str[1]);
     h=atof((char *)&str[2]);
     k=atof((char *)&str[3]);

     printf("\ny= %2.6f",y);
     printf("\nz= %2.6f",z);
     printf("\nh= %2.6f",h);
     printf("\nk= %2.6f",k);
     return 0;
 }

谁能回答我如何向角色发送 4 个双精度值 8字节数组?

【问题讨论】:

  • 减号 1:格式化您的代码。这是什么?你想问什么?
  • “我需要将一个包含 4 个双精度值的数组发送到一个大小为 8 字节的字符缓冲区”。好吧,你不能。 double 的内存大小为 8 个字节。您至少需要 32 个字节才能容纳其中的 4 个。
  • 你需要sizeof(double) * 4 字节来保存双打。

标签: c string bit-shift


【解决方案1】:

将这么多数据存储到这么小的内存中是不可能的。但是你能解释一下你最后想要做什么吗,因为现在我不明白为什么你需要将数字转换为字符串并再次将它们转换回来?

如果您只想将数字存储为字符串,则可以使用例如存储每个数字的字符串数组:

char numbers[4][20];
sprintf(numbers[0], "%f", x);
...
printf("%s", numbers[0]);

希望这会有所帮助!

【讨论】:

  • 当然[20] 对于1e30 这样的值是不够的。 "%f" 不是一个好的通用解决方案,尤其是对于大约一半的 double 来说很小。
  • 大小[20]被选为例子,作者似乎没有用大数字,但确实需要更大的空间来容纳更大的数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 2014-07-13
  • 2016-07-29
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多