繁体   English   中英

如何将unsigned char []转换为std :: vector

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

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我试图将其传递给我的项目的另一部分,要求它是一个向量

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*>'
2 个回复
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()};

这确实有效,因为带有指针的braced-init-list无法转换为initializer_list<unsigned char> [over.match.list] / 1:

当非聚合类类型T被列表初始化时,8.5.4指定根据本节中的规则执行重载解析,重载决策分两个阶段选择构造函数:

  • 最初,候选函数是类T [..]的初始化列表构造函数(8.5.4)

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

现在,有一个可行的初始化列表构造函数吗? [over.ics.list]:

  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;
4 将std :: vector转换为char *

我是一名从事项目研究的c ++学生,它使用简单的密码来接收和编码消息。 为此,该程序接受每个单词作为字符串,将字符串转换为字符向量,然后修改每个字符,然后再将其存储在文件中。 在将编码后的消息返回到主函数的行中,我收到以下错误消息:&lt;无法将std::vector&lt;char, st ...

9 是从unsigned转换为signed undefined?

它是印刷: 4294967291 相同 在第二行中,有符号值转换为无符号值。 所以b的值为UINTMAX + 1 - 5 = 4294967291。 我的问题是比较操作中发生了什么。 1)是否再次转换为无符号并与b进行比较? 2)b(即无符号)是否会被转换 ...

2012-02-29 11:23:25 3 3261   c
10 将std :: string转换为vector

由于要将一些数据传递到过时的API,因此我试图将std::string转换为char* (复制而不是强制转换)。 从表面上看,有很多方法可以做到这一点,但有人建议我将它作为一个明智的载体来进行。 但是,当我尝试这样做时,结果是乱码。 代码如下: (请注意令人不快的C强制转换-使 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM