如何将vector <uint8_t>转换为unsigned char * </uint8_t>

时间:2013-08-28 22:34:14

标签: c++ vector type-conversion reinterpret-cast

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

我很可能在这里混淆了一个值的指针,但也许我的整个方法都是错误的。

2 个答案:

答案 0 :(得分:4)

reinterpret_cast几乎永远不是正确的解决方案,除非你知道完全你正在做什么,甚至通常不知道。

在你的情况下,你只需要一个指向向量内部连续数据存储的指针(但向量本身,正如你所注意到的那样!它也存储了其他数据,例如尺寸和容量)。这很容易,它是数据的第一个元素的指针:

&vector[0]

所以你的代码看起来如下:

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

答案 1 :(得分:1)

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