从void *转换为float

时间:2017-01-04 22:16:20

标签: pointers

我有一个指向传入的内存中某个位置的指针,void *dataLoc

某些程序正在将内存转移为一堆unsigned char,其中0x00为0且0xFF为1。

我希望能够拉出每个第4个字符并将其转换为应该表示的数字的float。但是我无法理解如何从void *char[]数组到float[]数组。

我最初的想法是做类似

的事情
for(i=0,i<100,i++){
    floatArray[i] = (float)(*((unsigned char *)dataLoc[4*i])) / 255;
}
  1. void *被投放到char *

  2. 从for循环中选择下一个第4个字符

  3. *取消引用字符指针,这应该给我一个unsigned char

  4. float应该将char更改为float,但我想要的数字为float * 255

  5. 我除以255得到我想要的分数。

  6. 这失败了,因为我得到了算术中使用的错误“类型'指针'void '     'void '不是指向对象的指针类型,除此之外,我并不确信该行的其余部分会按照我想要的方式运行。

    有人可以建议正确的方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

很好,您已启用警告。

dataLoc[4*i]发生在(unsigned char *)dataLoc之前,并导致“pointer of type 'void *' used in arithmetic ...

首先投放到unsigned char *

同时删除额外级别的*。以下是类型unsigned char

((unsigned char *)dataLoc)[4*i]

修正:

  void *  dataLoc;
  float floatArray[100];

  // for(i=0,i<100,i++){  Use ';', not ','
  for(int i=0;i<100;i++){
      // Cast to `unsigned char *` before using `[]`
      // * not needed here ---v  
      floatArray[i] = (float)( (   ((unsigned char *)dataLoc)  [4*i])) / 255;
  }

  for (int i=0; i<100 ;i++) {
    unsigned char value = ((unsigned char *)dataLoc)[4*i];
    floatArray[i] = value / 255.0f;
  }