C++ Konvertieren Vector<BYTE> to string in dem ersten Vektor-byte ist 0
Ich bin versucht zu konvertieren von einem std::Vektor von BYTES (oder unsigned char) in einen std::string.
Das problem was ich habe ist, wenn das erste element des Vektors eine 0 ist, dann ist dies eine leere Zeichenfolge zurück, nachdem die Konvertierung.
Habe ich versucht die 2 folgenden Methoden. Beide string1 und string2 wird ein leerer string zurückgegeben.
Die Ergebnisse, die ich erwarte ist eine Zeichenfolge, die beginnt mit 2 x 0s gefolgt von mehreren anderen Zeichen.
//vector of BYTE, contains these 7 elements for example: (0,30,85,160,155,93,0)
std::vector<BYTE> data;
//method 1
BYTE* pByteArray = &data[0];
std::string string1 = reinterpret_cast<LPCSTR>(pByteArray);
//method 2
std::string string2(data.begin(),data.end());
//both string1 and string2 return ""
Ich vermute, weil das erste BYTE in dem Vektor 0, so dass die string-Zuweisung ist, denken, es ist null oder leer.
Gibt es eine andere Wandlung, die ich tun kann, um wieder den rest der Zeichenfolge?
Jede Hilfe sehr dankbar.
- Wie haben Sie feststellen, dass Sie leer waren? Das zweite ist richtig (beachten Sie aber
std::string
verwendetchar
, nichtunsigned char
). - Methode 1 funktioniert nicht, da ruft es die
const char*
überlastung derstd::string
Konstruktor, die Haltestellen auf\0
. Warum die 2. nicht funktioniert hat, ist mehr als rätselhaft. - Wahrscheinlich die 2. Methode hat zwar funktioniert, aber das drucken der string aus ist es leer.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die zweite ist nicht wirklich leer bitte beachten:
Auf ideone
Bearbeiten Überprüfung der Größe ist auch eher trivial, wie es 4.
Bezüglich
data
undnull
Kündigung als docs freundlich erklären (Hervorhebung von mir):Einen "c++98-sichere" Lösung Aussehen könnte wie:
Sowieso der Druck ist einfach zu zeigen, die Saiten "nicht-leere" 🙂
string2.data() + 1
ist nicht gut.data()
ist nicht NULL-terminiert ist, nurc_str()
ist.c_str()
im standard, so dass Sie beide teilen die gleichen details.std::vector::data
:/data()
wirdnull
beendet, das verlinkte Beispiel(@ideone) sagte, dass es c++11 und und eh-Druck, es war einfach nur eine Art zu demonstrieren, die op ' s falsche Annahme. Wahrscheinlich ist er mitdata
undsize
beziehen sich auf die Daten, die von derstring
.Erste Methode ist jedoch falsch Sekunde gibt das richtige Ergebnis - string ist null-terminiert. Ob eine Kündigung mark (null) ist der erste Charakter, es sieht leer, aber eigentlich ist es nicht.
Auch über die erste Methode, die Sie wollte:
Wenn jemand auf der Suche für hex-Ausgabe wie
0x90 0xBA 0xFF
dann hier der code, den ich verwendet habe, diese zu generieren: