编辑您的帖子非常不清楚。假设 data 实际上是一个指向 double 数组的指针,那么解决方案就更简单了:
double * pd = static_cast<double const *>(data);
double d0 = pd[0];
double d1 = pd[1];
或(C):
double * pd= (double const *)(data);
double d0 = pd[0];
double d1 = pd[1];
您无法对 void * 执行指针运算和取消引用,因此 *data 或 data + 8 无效。
我不明白你到底想做什么,但这里是你如何访问数组中的数据:
假设存储的数据实际上是int,要访问第8个元素并将其转换为double,你应该这样写:
double el = static_cast<double>*(static_cast<int const *>(data) + 8));
更好:
int *p = static_cast<int const *>(data);
double el = static_cast<double>(p[8]);
请注意,将data 转换为原始指针类型非常重要。在我的示例中,我使用了 int,但您应该将其替换为您的实际数据。
注意,如果您显示为 {0,0,0,0,0,0,0,40,20,0,0,0,0,0,0} 的内容实际上是字节,那么原始指针类型是 char *,您应该转换为 char *。
进一步澄清从指针转换数据:
假设你有一个指向int的指针:
int i = 24;
int *pi = &i;
如何将地址pi 上的数据转换为双倍?
// wrong:
double *pd = &i;
cout << *pd << endl;
这是错误的,因为您所做的是转换指针类型而不是实际数据。实际上,您将地址pi 处的位模式解释为表示double 的位模式。但是那个位模式代表和int。
您需要做的是按原样检索数据:int,然后将int 转换为double:
int x = *pi;
double d = (double) x;