C++ 转换c++;标准::向量<;标准::字符串>;到std::vector<;无符号字符>;(反之亦然)
有没有一种简单的方法可以将C++ 转换c++;标准::向量<;标准::字符串>;到std::vector<;无符号字符>;(反之亦然),c++,string,stl,vector,binary,C++,String,Stl,Vector,Binary,有没有一种简单的方法可以将std::vector转换为std::vector(然后再转换为std::vector),而不必手动转换每个字符串并添加分隔符,如逗号?简短的回答是:没有 向量和字符串的实现方式是作为独立的堆分配数组。因此,您可以将向量转换为字符**(字符数组的锯齿状数组),并将向量转换为字符*(字符数组)在考虑内部结构时,这会将问题转化为:是否有任何方法可以连接数组而不必复制它们 不,没有。简短的回答是:没有 std::vector<char> chars; for (c
std::vector
转换为std::vector
(然后再转换为std::vector
),而不必手动转换每个字符串并添加分隔符,如逗号?简短的回答是:没有
向量和字符串的实现方式是作为独立的堆分配数组。因此,您可以将向量
转换为字符**
(字符数组的锯齿状数组),并将向量
转换为字符*
(字符数组)在考虑内部结构时,这会将问题转化为:是否有任何方法可以连接数组而不必复制它们
不,没有。简短的回答是:没有
std::vector<char> chars;
for (const std::string& s : strings)
{
for (char c : s)
{
chars.push_back(c);
}
chars.push_back(',');
}
向量和字符串的实现方式是作为独立的堆分配数组。因此,您可以将向量
转换为字符**
(字符数组的锯齿状数组),并将向量
转换为字符*
(字符数组)在考虑内部结构时,这会将问题转化为:是否有任何方法可以连接数组而不必复制它们
没有。没有。std::vector chars;
std::vector<char> chars;
for (const std::string& s : strings)
{
for (char c : s)
{
chars.push_back(c);
}
chars.push_back(',');
}
for(const std::string&s:strings)
{
用于(字符c:s)
{
chars.推回(c);
}
字符。推回(',');
}
如果没有新的for循环语法,它会有点笨拙,但是你知道了;
for(const std::string&s:strings)
{
用于(字符c:s)
{
chars.推回(c);
}
字符。推回(',');
}
如果没有新的for循环语法,它会有点笨拙,但是你明白了。应该让你把一个数据结构塞进一个
无符号字符的序列中,然后重新构造它。应该让你把一个数据结构塞进一个无符号字符的序列中,然后重新构造它。第一个问题是w嘿,你想做什么?你想做什么
std::vector
表示什么,它的语义应该是什么
转换是?如果您只想连接,那么最简单的
解决方案如下:
std::vector<unsigned char> results;
for ( std::vector<std::string>::const_iterator iter = source.begin();
iter != source.end();
++ iter ) {
results.insert( results.end(), iter->begin(), iter->end() );
}
但问题是:为什么无符号字符
?大概是因为您
格式化为某个特定协议的缓冲区。是一些附加的
需要格式化?协议中字符串的格式是什么?
(通常为长度+数据或'\0'
终止。)
该协议是否需要某种形式的对齐?(对于XDR,是其中之一)
最广泛使用的协议-,您需要类似于:
std::vector<unsigned char> results;
for ( std::vector<std::string>::const_iterator iter = source.begin();
iter != source.end();
++ iter ) {
size_t len = iter->size();
results.push_back( (len >> 24) & 0xFF );
results.push_back( (len >> 16) & 0xFF );
results.push_back( (len >> 8) & 0xFF );
results.push_back( (len ) & 0xFF );
results.insert( results.end(), iter->begin(), iter->end() );
while ( results.size() % 4 != 0 ) {
results.push_back( '\0' );
}
}
std::向量结果;
对于(std::vector::const_迭代器iter=source.begin();
iter!=source.end();
++国际热核聚变实验堆(iter){
尺寸长度=iter->size();
结果:推回((len>>24)和0xFF);
结果:推回((len>>16)和0xFF);
结果:推回((len>>8)和0xFF);
结果:推回((len)和0xFF);
results.insert(results.end(),iter->begin(),iter->end());
while(results.size()%4!=0){
结果。将_向后推('\0');
}
}
第一个问题是为什么,你想做什么?你想做什么
std::vector
表示什么,它的语义应该是什么
转换是?如果您只想连接,那么最简单的
解决方案如下:
std::vector<unsigned char> results;
for ( std::vector<std::string>::const_iterator iter = source.begin();
iter != source.end();
++ iter ) {
results.insert( results.end(), iter->begin(), iter->end() );
}
但问题是:为什么无符号字符
?大概是因为您
格式化为某个特定协议的缓冲区。是一些附加的
需要格式化?协议中字符串的格式是什么?
(通常为长度+数据或'\0'
终止。)
该协议是否需要某种形式的对齐?(对于XDR,是其中之一)
最广泛使用的协议-,您需要类似于:
std::vector<unsigned char> results;
for ( std::vector<std::string>::const_iterator iter = source.begin();
iter != source.end();
++ iter ) {
size_t len = iter->size();
results.push_back( (len >> 24) & 0xFF );
results.push_back( (len >> 16) & 0xFF );
results.push_back( (len >> 8) & 0xFF );
results.push_back( (len ) & 0xFF );
results.insert( results.end(), iter->begin(), iter->end() );
while ( results.size() % 4 != 0 ) {
results.push_back( '\0' );
}
}
std::向量结果;
对于(std::vector::const_迭代器iter=source.begin();
iter!=source.end();
++国际热核聚变实验堆(iter){
尺寸长度=iter->size();
结果:推回((len>>24)和0xFF);
结果:推回((len>>16)和0xFF);
结果:推回((len>>8)和0xFF);
结果:推回((len)和0xFF);
results.insert(results.end(),iter->begin(),iter->end());
while(results.size()%4!=0){
结果。将_向后推('\0');
}
}
,例如。)你能举个例子吗?请澄清你的问题。前者是字符串序列,而后者是单个字符序列。我想,你需要某种分隔符。在知道我们需要如何理解你想要做什么之前,举个例子会很有帮助。基本上,如果我想将std::string转换为std::vector,我可以做一些类似于std::vector char\u vec(myString.begin(),myString.end())
,对吗?我想知道是否有一种简单的方法可以以类似的方式将std::vector转换为std::vector`所以你真的不是说std::vector
?这个问题确实需要澄清。字符串包装字符数组,字符向量包装字符数组,所以可以进行转换。但是字符串向量是acting是一个二维字符数组,而字符向量是一个一维数组;你怎么可能将一个字符“转换”为另一个字符?你能举个例子吗?请澄清你的问题。前者是字符串序列,后者是单个字符序列。我想,你需要某种分隔符。在知道我们需要如何转换之前理解你想做什么。举个例子会很有帮助。基本上,如果我想把std::string转换成std::vector,我可以这样做std::vector char\u vec(myString.begin(),myString.end())
,对吗?我想知道是否有一种简单的方法可以以类似的方式将std::vector转换为std::vector`所以你的意思不是说std::vector
?这个问题确实需要澄清