如何转换矢量<uint8_t>转换为无符号字符*

How can I convert a vector<uint8_t> into an unsigned char*

本文关键字:转换 gt 字符 无符号 uint8 lt 何转换      更新时间:2023-10-16

我有一个const vector<uint8_t>>,我需要将它传递给一个接受const unsigned char*的函数。这两个类型大小相同,等等,所以我猜有一个很好的方法可以强制使用这里的类型。处理这类问题的惯用方法是什么?

我的第一直觉是使用reinterpret_cast,但在强制转换之后,数据就不一样了。这是我的代码:

shared_ptr<const vector<uint8_t>> data = operation.getData();
const unsigned char* data2 = reinterpret_cast<const unsigned char*>(&data);
myFunction(data2, data->size());

很可能我把指针和这里的值混淆了,但也许我的整个方法都不正确。

reinterpret_cast几乎从来都不是正确的解决方案,除非您确切地知道您在做什么,即使这样通常也不知道。

在您的情况下,您只需要一个指向向量内连续数据存储的指针(但而不是向量本身,正如您所注意到的!它还存储其他数据,如大小和容量)。这很容易,它是数据的第一个元素的指针:

&vector[0]

因此,您的代码将如下所示:

myFunction(&(*data)[0], data->size());

只需使用vector<unsigned char>即可。在所有平台上,unsigned char将至少具有8个比特。在具有8位无符号整数类型的平台上,uint8_t将是unsigned char的同义词;在没有8位无符号整数类型的平台上,uint8_t将不存在,但unsigned char将存在。