从void * buffer读取double

时间:2011-10-12 15:00:20

标签: c

请原谅我缺乏理解,我是C的初学者。所以,我有一个void *缓冲区,我calloc喜欢这样:

void * dataBuffer = calloc(samples, sizeof(double));

并希望稍后阅读:

double myDoubleDB = dataBuffer[sampleIndex];

但是我收到错误,因为它们属于不同的类型(void和double)。

我怎样才能做到这一点?我的拱门是ARM,我正在使用GCC编译

更新:dataBuffer超出了我的范围(其他图书馆),它只是void *

3 个答案:

答案 0 :(得分:4)

double *dataBuffer = calloc(samples, sizeof(double));

请注意,对于double,2个字节可能不够。

另请注意,内存中的所有位0(由calloc提供)不一定代表有效的double值(在大多数平台上,它将参见IEEE754)。

如果您无法更改dataBuffer的声明,您仍应更正calloc,然后执行(按照其他人的建议):

double myDoubleDB = ((double*)dataBuffer)[sampleIndex];

答案 1 :(得分:3)

如果你可以在第一时间指向double,那就更好了。

double * dataBuffer = calloc(samples, sizeof *dataBuffer);
double myDoubleDB = dataBuffer[sampleIndex];

否则,只有不安全使用强制转换将void*显式转换为double*

void * dataBuffer = calloc(samples, sizeof (double));
double myDoubleDB = ((double*)dataBuffer)[sampleIndex];

答案 2 :(得分:1)

你需要一些演员:

double myDoubleDB = ((double*)dataBuffer)[sampleIndex];

注意:为简单起见,最好使用指向double而不是void的指针。

根据最新消息:

您可以使用指针来减少演员阵容:

double *doubleDataBuffer = (double*) dataBuffer;
double myDoubleDB = doubleDataBuffer[sampleIndex];