Ich habe einen Zeiger auf einen Vektor vom Typ uint8.Vektor uint8 bespannen
Wie würde ich diesen Zeiger nehmen und die Daten in den Vektor in eine vollständige Zeichenfolge vertretend für seinen Inhalt umwandeln?
Ich habe einen Zeiger auf einen Vektor vom Typ uint8.Vektor uint8 bespannen
Wie würde ich diesen Zeiger nehmen und die Daten in den Vektor in eine vollständige Zeichenfolge vertretend für seinen Inhalt umwandeln?
Sie könnten nur die std::string
mit der Sequenz aus dem std::vector<uint8_t>
erhalten initialisieren:
std::string str(v->begin(), v->end());
Es gibt keine Notwendigkeit, die Überprüfung irgendwelche Tricks zu spielen, ob die std::vector<uint8_t>
leer ist: Wenn ja, wird der Bereich sei leer. Möglicherweise möchten Sie jedoch überprüfen, ob der Zeiger v
null ist. Das obige erfordert, dass es auf ein gültiges Objekt zeigt.
Ist es in Ordnung, wenn ich frage, warum du so lange weg warst? – 0x499602D2
@ 0x499602D2: Sie meinen, warum ich für eine Weile keine Fragen beantwortet habe? Es ist einfach: Ich war damit beschäftigt, neben der Arbeit Arbeit zu erledigen. Im Moment bin ich beschäftigt, um neben der Arbeit zu arbeiten. –
Ich bin überrascht, dass diese Antwort akzeptiert wird, weil sie nicht etwas produziert, "repräsentativ für ihren Inhalt". Wenn Ihr Vektor "{1,2,3,4,5,6,7,8,9}" ist, wird Ihre Ausgabe eine Kette nicht darstellbarer Zeichen sein! –
vector<uint8_t> *p;
string str(
p && !p->empty() ? &*p->begin() : NULL,
p && !p->empty() ? &*p->begin() + p->size() : NULL);
Es gibt keine Notwendigkeit, irgendwelche Tricks zu spielen mit 'empty()' Vektoren: sie werden einen gültigen Bereich zurückkehren und 'std :: string' einen Konstruktor hat ein Paar Eingangs Iteratoren nehmen. –
@ DietmarKühl: Oh ja, du hast recht, ich habe eine Gewohnheit, dies zu tun, weil ich mit einem alten STL-Implementierung manchmal kompilieren, die nicht, dass Templat-Überlastung, völlig vergessen hat. – Mehrdad
Ja, die alte RogueWave-Implementierung wird immer noch als Standard-C++ - Bibliothek für Sun Studio ausgeliefert. Wenn ich das verwenden müsste, würde ich tatsächlich 'std :: copy (v-> begin(), v-> end(), std :: back_inserter (str));' verwenden. –
Für diejenigen, die die Umwandlung will nach erklärt ein String ist getan werden, können Sie std :: string :: assign(), zum Beispiel verwenden:
std::string str;
std::vector<uint8_t> v;
str.assign(v.begin(), v.end());
Sie sollten bereits wissen, die Länge aus dem Vektor -> Größe(). Sind nicht-ASCII-Daten vorhanden oder nicht? – Duck
Es sind alles Ascii Daten. –