如何转换矢量<uint8_t>转换为无符号字符*
How can I convert a vector<uint8_t> into an unsigned char*
我有一个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
将存在。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 使用shared_ptr<字符串>转换为一个无序集合<字符串>