C++ 转换向量<;int8>;到向量<;uint8>;

C++ 转换向量<;int8>;到向量<;uint8>;,c++,c++17,C++,C++17,我使用的api返回字节数组为std::vector,但我的应用程序的其余部分使用字节数组为std::vector 如何将std::vector转换为std::vector?您可以遍历每个元素并强制转换/推回到新向量: std::vector<int8> vec_int8 = returnedFromApi(); // assume it is filled std::vector<uint8> vect_uint8; for(int item = 0; item <

我使用的api返回字节数组为
std::vector
,但我的应用程序的其余部分使用字节数组为
std::vector


如何将
std::vector
转换为
std::vector

您可以遍历每个元素并强制转换/推回到新向量:

std::vector<int8> vec_int8 = returnedFromApi(); // assume it is filled
std::vector<uint8> vect_uint8;
for(int item = 0; item < vec_int8.size(); ++item)
{
  vect_uint8.push_back(static_cast<uint8>(vec_int8[item]));
}
std::vector vec_int8=returnedFromApi();//假设它被填满了
std::矢量向量uint8;
对于(int item=0;item
您可以遍历每个元素并投射/推回新向量:

std::vector<int8> vec_int8 = returnedFromApi(); // assume it is filled
std::vector<uint8> vect_uint8;
for(int item = 0; item < vec_int8.size(); ++item)
{
  vect_uint8.push_back(static_cast<uint8>(vec_int8[item]));
}
std::vector vec_int8=returnedFromApi();//假设它被填满了
std::矢量向量uint8;
对于(int item=0;item
您可以使用接受一系列迭代器的构造函数:

std::vector<uint8>(std::begin(signed_vec), std::end(signed_vec));
std::vector(std::begin(signed_vec),std::end(signed_vec));
也就是说,如果您实际上不需要
std::vector
对象,而只是想读取一系列无符号整数,您可以重新解释它们:

uint8* ptr_beg = reinterpret_cast<uint8>(signed_vec.data());
uint8* ptr_end = ptr_beg + signed_vec.size();
uint8*ptr_beg=reinterpret_cast(signed_vec.data());
uint8*ptr_end=ptr_beg+signed_vec.size();

相同整数大小的无符号和有符号版本之间的转换是重新解释定义良好的极少数情况之一。

您可以使用接受一系列迭代器的构造函数:

std::vector<uint8>(std::begin(signed_vec), std::end(signed_vec));
std::vector(std::begin(signed_vec),std::end(signed_vec));
也就是说,如果您实际上不需要
std::vector
对象,而只是想读取一系列无符号整数,您可以重新解释它们:

uint8* ptr_beg = reinterpret_cast<uint8>(signed_vec.data());
uint8* ptr_end = ptr_beg + signed_vec.size();
uint8*ptr_beg=reinterpret_cast(signed_vec.data());
uint8*ptr_end=ptr_beg+signed_vec.size();
相同整数大小的无符号和有符号版本之间的转换是重新解释定义良好的极少数情况之一。

是否为您提供了合适的起点?是否为您提供了合适的起点?