在char []缓冲区中保存double值

时间:2013-10-05 18:14:37

标签: c double buffer

我尝试编写程序whitch使用stack来呈现某种数据(char,double或string)。

char *data_buffer;
double n;
...
data_buffer = (char*)malloc(4096 * sizeof(char));
...
*(data_buffer + buffer_top) = n; //buffer_top - just offset for first byte
...
printf("%f ", (double)*(data_buffer + buffer_top));

变量data_buffer和buffer_top正确。 但输出很奇怪。只有当n <1时,它才是正确的。 127。 为什么会这样?

P.S。我不想更改data_buffer的类型,因为它还包含不同长度的char和字符串。

工作示例(!! - 在将其写入缓冲区之前测试n的输出:

126 //push
!! 1.260000e+02 
127 // push
!! 1.270000e+02   
128 // push
!! 1.280000e+02 
. // pop
-128.000000 //error
. //pop
127.000000  //ok
. //pop
126.000000  //ok
123456 // push
!! 1.234560e+05 
. //pop
64.000000 //error

1 个答案:

答案 0 :(得分:1)

两行都缺少对(double *)的强制转换,因此它们分别执行char分配和读取。以下是您的代码实际执行的操作,添加了一些显式(char)强制转换,以突出显示不正确的类型转换。

*(data_buffer + buffer_top) = (char) n;
...
printf("%f ", (double) (char) *(data_buffer + buffer_top));

你想要的是:

*((double *) (data_buffer + buffer_top)) = n;
...
printf("%f ", *((double *) (data_buffer + buffer_top)));