Ich habe eine char * Variable:Wie konvertiert man char * in std :: vector?
// char* buffer;
// ...
fread (buffer, 1, lSize, pFile);
// ...
Wie kann ich es konvertieren Vektor std ::? Casting wird mir einen Fehler melden.
Ich habe eine char * Variable:Wie konvertiert man char * in std :: vector?
// char* buffer;
// ...
fread (buffer, 1, lSize, pFile);
// ...
Wie kann ich es konvertieren Vektor std ::? Casting wird mir einen Fehler melden.
Warum nicht ein std::vector
verwenden zu beginnen:
std::vector<char> buffer(lSize);
std::fread(&buffer[0], 1, buffer.size(), pFile);
std::vector<char> data(buffer, buffer + size);
James McNellis Antwort besser ist, wenn man es so tun können.
Sie können nicht zwischen einem char * und einem Vektor umwandeln; Pointer-Casting bewirkt, dass das Ergebnis genau die gleichen Bytes wie die Eingabe hat. Daher ist es im Allgemeinen eine schlechte Idee, es sei denn, Sie führen Low-Level-Bit-Manipulation durch.
Angenommen, Sie möchten einen Vektor von Zeichen erstellen, können Sie ein neues Vektorobjekt vom Typ std::vector<char>
erstellen (beachten Sie, dass Sie den Typ der Vektorelemente angeben müssen) und initialisieren Sie es aus dem Array, indem Sie den Anfang und übergeben Endzeiger an den Konstruktor:
std::vector<char> vec(buffer, buffer+lSize);
Man beachte, dass das zweite Argument ist ein "End-Zeiger", sehr häufig in C++. Wichtig ist, dass es ein Zeiger auf das Zeichen nach das Ende des Puffers, nicht das letzte Zeichen im Puffer ist. Mit anderen Worten, der Start ist inklusive, aber das Ende ist exklusiv.
Eine andere Möglichkeit (da es sich um Zeichen handelt) ist die Verwendung eines std::string
statt dessen. Dies kann oder kann nicht das sein, was Sie wollen (abhängig davon, ob Sie an char * als String oder Array von Bytes denken). Sie können es auf die gleiche Art und Weise konstruieren:
std::string str(buffer, buffer+lSize);
oder mit einem anderen Konstruktor, die Größe als zweites Argument nehmen:
std::string str(buffer, lSize);
Obwohl James' Antwort besseren Code ermutigt, ist dies die richtige Antwort zur Frage. Manchmal hast du einfach ein Char *. – enobayram