C++ void*转换成unsigned char*
时间: 2024-04-23 11:18:36 浏览: 255
在C++中,void*是一种通用的指针类型,可以指向任意类型的数据。而unsigned char*是指向无符号字符类型的指针。要将void*转换为unsigned char*,可以使用类型转换操作符reinterpret_cast。
下面是一个示例代码:
```cpp
void* ptr = /* 指向某个数据的void指针 */;
unsigned char* ucharPtr = reinterpret_cast<unsigned char*>(ptr);
```
在这个示例中,我们将void*指针ptr转换为unsigned char*指针ucharPtr。这样就可以通过ucharPtr来访问以无符号字符类型存储的数据。
需要注意的是,这种转换是一种底层的操作,需要谨慎使用。确保在转换之前,void*指针指向的内存确实包含了无符号字符类型的数据。
相关问题
invalid conversion from 'void (*)()' to 'void (*)(byte)' {aka 'void (*)(unsigned char)'} [-fpermissive]
这个错误通常发生在函数指针类型不匹配的情况下。在C++中,函数指针类型必须与函数的参数类型和返回类型匹配。在您的代码中,您可能尝试将一个无参数的函数指针转换为一个带有一个byte参数的函数指针。这会导致编译器抛出上述错误。
要解决这个问题,您需要确保函数指针的类型与函数的参数类型和返回类型匹配。如果您的函数需要一个byte参数,则您需要使用带有一个byte参数的函数指针来调用它。如果您的函数不需要任何参数,则您需要使用无参数的函数指针来调用它。
pullflowmonitor.cpp: In member function 'bool PullFlowMonitor::initModel()': pullflowmonitor.cpp:1223:99: error: cannot convert 'uint8_t* {aka unsigned char*}' to 'void**' for argument '1' to 'aclError aclrtMallocCached(void**, size_t, aclrtMemMallocPolicy)' AclInputs.inputs[i].data,sizeof(uint8_t)*inputsize,ACL_MEM_MALLOC_HUGE_FIRST);
这个错误是因为aclrtMallocCached函数的第一个参数是一个指向void*类型的指针,而你的代码中传递的是一个指向uint8_t*类型的指针,这样会导致类型不匹配,编译器无法编译通过。
解决这个问题,可以将aclrtMallocCached函数的第一个参数的类型改为void*类型的指针。
例如:
```c++
void* buffer;
aclError ret = aclrtMallocCached(&buffer, size, ACL_MEM_MALLOC_HUGE_FIRST);
```
或者使用reinterpret_cast进行类型转换:
```c++
uint8_t* buffer;
aclError ret = aclrtMallocCached(reinterpret_cast<void**>(&buffer), size, ACL_MEM_MALLOC_HUGE_FIRST);
```
这样就可以避免这个编译错误了。
阅读全文