【发布时间】:2019-05-15 14:31:44
【问题描述】:
我有一个请求char* 的 API,这是我的 API 函数:
CANMessage(unsigned _id, const char* _data, char _len = 8)
更多信息在这里:https://os.mbed.com/docs/mbed-os/v5.11/mbed-os-api-doxy/classmbed_1_1_c_a_n_message.html
我想从另一个函数中调用这个函数,但我对const char* 和强制转换感到困惑。我想从函数foo()调用这个函数,像这样:
void foo(unsigned int id, /*???*/ data, char len) {
CANMessage(id, data, len)
}
所以我需要将 id、data 和 len 传递给函数 foo。我的问题是进来的data 是uint8_t 类型。我得到了一个uint8_t 的向量,其中第一个元素的地址是我需要传递的:
vector<uint8_t> dta;
我试图将其传递为&dta[0]:foo(idNo, &dta[0], length)
使用 foo 函数如下:
void foo(unsigned int id, uint8_t* data, char len) {
CANMessage(id, (char*)data, len)
}
但我得到“std::uint8_t * 类型的参数与 char* 类型的参数不兼容
当调用它的函数foo 接受uint8_t* 时,我如何将它作为const char* 传递?
请注意,我无法更改类型,dta 必须保留vector<uint8_t>。
【问题讨论】:
-
请注意,
char可能是signed或unsigned(取决于您的实现),并且在这两种情况下,char都是与signed char和unsigned char不同的类型。 -
一般来说,您应该将任何 C 风格的转换视为您做错了什么的危险信号。
-
至于您的问题,能否请您复制粘贴 full 和 *complete 错误输出,包括任何可能的信息说明。
-
请提供MCVE。一般来说,转换为
const char *应该没有问题。 -
我无法重现您的示例的问题(缺少部分以使其完整):coliru.stacked-crooked.com/a/1b54a11a5b0a341f
标签: c++ c casting signed unsigned-char