我有一个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());
我很可能在这里混淆了一个值的指针,但也许我的整个方法都是错误的。
答案 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
将会存在。