如何将无符号字符[]转换为标准::vector<无符号字符>

How to convert unsigned char[] to std::vector<unsigned char>

本文关键字:无符号 字符 gt vector 标准 lt 转换      更新时间:2023-10-16

我正在尝试将其传递给需要它是向量的项目的另一部分

unsigned char vch[65];
unsigned int size() const { return GetLen(vch[0]); }
const unsigned char* begin() const { return vch; }
const unsigned char* end() const { return vch + size(); 

std::vector<unsigned char> Raw() const
{
        return (vch, vch + size());
}

我收到错误

 could not convert '(const unsigned char*)(&((const CPubKey*)this)-
CPubKey::vch)' from 'const unsigned char*' to 'std::vector<unsigned char*>'
return (vch, vch + size());

这使用逗号运算符 - 长话短说,写

return std::vector<unsigned char>(vch, vch + size());

std::vector<unsigned char> vec(vch, vch + size())
return vec;

相反。(后者在语义上是等效的,但在可读性方面更可取)或者使用 C++11:

return {vch, vch + size()};

这确实有效,因为带有指针的大括号初始化列表无法转换为 initializer_list<unsigned char> 。[over.match.list]/1:

当非聚合类类型的对象T被列表初始化时,例如 该 8.5.4 指定根据 对于本节中的规则,重载解析选择 构造函数分为两个阶段:

  • 最初,候选函数是类 T [..] 的初始值设定项列表构造函数 (8.5.4)。

  • 如果未找到可行的初始值设定项列表构造函数,则再次执行重载解析,其中 候选函数是类T的所有构造函数,参数列表由元素组成 初始值设定项列表。

现在,是否有可行的初始值设定项列表构造函数?[上.ics.列表]:

  1. 否则,如果参数类型std::initializer_list<X>并且初始值设定项列表的所有元素都可以隐式转换 到 X , [..]

 10.除上述情况外,在所有其他情况下,都不可能进行转换。

显然没有从unsigned char*unsigned char的隐式转换,所以选择了迭代器对构造函数模板。演示

它可能不会直接回答答案。

但问题是,当您可以使用 std::stringstd::basic_string<unsigned char> 而不是 std::vector 时,为什么要使用向量,如下所示:

unsigned char a[]="1234";
std::basic_string<unsigned char> v=a;