gpt4 book ai didi

c++ - 将 uint8_t* 更改为 char*?

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:26 25 4
gpt4 key购买 nike

我有一个请求 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 ,其中第一个元素的地址是我需要传递的地址:

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* 类型的参数不兼容

如何将其作为 const char* 传递当函数 foo ,调用它,接受 uint8_t*

请注意我无法更改类型,dta 必须保留 vector<uint8_t> .

最佳答案

std::uint8_t 等于 unsigned char

这与普通 char 或 signed char 不同,但它们都是 8 位的,因此转换在技术上是可行的。

许多原本需要“缓冲区”的函数在其定义中使用 char* 而不是正确的 unsigned char* 是很常见的。因此,类型转换很可能是无害的。

如果函数实际上需要字符而不是缓冲区,那么你就会遇到问题,因为类型不同,而你是否会遇到问题是不确定的。

关于c++ - 将 uint8_t* 更改为 char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56151841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com