1

我有一个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());

我可能在这里混淆了一个值的指针,但也许我的整个方法是不正确的。

4

2 回答 2

4

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

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

&vector[0]

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

myFunction(&(*data)[0], data->size());
于 2013-08-28T22:38:36.347 回答
1

vector<unsigned char>开始用。在所有平台上,unsigned char将至少有 8 位。在具有 8 位无符号整数类型的平台上,uint8_t将是 ; 的同义词unsigned char。在没有 8 位无符号整数类型的平台上,uint8_t将不存在,但unsigned char会存在。

于 2013-08-28T23:00:23.447 回答