最初の質問は、なぜ、あなたは何をしようとしていますか? std::vector<std::string>
は何を表し、変換は のセマンティクスでなければなりませんか?あなただけ連結したい場合は、最も簡単な ソリューションのようになります。
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());
}
unsigned char
へchar
の暗黙的な変換は のresltを世話をします。 insert
後 ターミネータのために、それを追加(push_back
);:
あなたがソース内の各 文字列の区切りやターミネーターのいくつかの並べ替えを挿入する必要がある場合は、あなたが同様にループ内でそれを行うことができます セパレーターのために、私は一般的にinsert
、 例えば:
std::vector<unsigned char> results;
for (std::vector<std::string>::const_iterator iter = source.begin();
iter != source.end();
++ iter) {
if (iter != source.begin()) {
results.push_back(separator);
}
results.insert(results.end(), iter->begin(), iter->end());
}
前に条件付きでそれを追加しかし、問題は次のとおりです。なぜunsigned char
?おそらく、あなたは なので、いくつかの特定のプロトコル用のバッファに書式設定します。追加の フォーマットが必要ですか?あなたのプロトコルの文字列のフォーマットは何ですか? (通常、length + data、または'\0'
が終了します) プロトコルには何らかの整列が必要ですか? (XDR — の1最も広く使用されるプロトコル—については、次のような何か必要があると思います:例えば
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 :: stringをstd :: vectorに変換したい場合は、 'std :: vector char_vec(myString.begin()、myString.end )) '、そうですか?もしstd :: vector をstd :: vector 'に同様に変換する簡単な方法があるかどうか疑問に思っていました。 –
user1225011