我有一个指向传入的内存中某个位置的指针,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;
}
void *
被投放到char *
。
从for循环中选择下一个第4个字符
*
取消引用字符指针,这应该给我一个unsigned char
,
float
应该将char
更改为float
,但我想要的数字为float
* 255
我除以255得到我想要的分数。
这失败了,因为我得到了算术中使用的错误“类型'指针'void ' 'void '不是指向对象的指针类型,除此之外,我并不确信该行的其余部分会按照我想要的方式运行。
有人可以建议正确的方法来解决这个问题吗?
答案 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;
}