如何将无符号字符[]转换为标准::vector<无符号字符>
How to convert unsigned char[] to std::vector<unsigned char>
我正在尝试将其传递给需要它是向量的项目的另一部分
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.列表]:
- 否则,如果参数类型
std::initializer_list<X>
并且初始值设定项列表的所有元素都可以隐式转换 到X
, [..]10.除上述情况外,在所有其他情况下,都不可能进行转换。
显然没有从unsigned char*
到unsigned char
的隐式转换,所以选择了迭代器对构造函数模板。演示。
它可能不会直接回答答案。
但问题是,当您可以使用 std::string
或 std::basic_string<unsigned char>
而不是 std::vector 时,为什么要使用向量,如下所示:
unsigned char a[]="1234";
std::basic_string<unsigned char> v=a;
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 库特无符号字符
- 寻找一种更好的方法来表示无符号字符数组
- C++ 无符号字符 *{varName};-> C#
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 将浮点数转换为无符号字符数组并打印出来
- 在函数中返回无符号字符数组,但不返回指针
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 无符号字符打印其 ASCII 值
- 字符数组到无符号字符 *
- 是否可以在 c++ 中将两位数保存在无符号字符中