2010-11-24 14 views

Antwort

18

Warum nicht ein std::vector verwenden zu beginnen:

std::vector<char> buffer(lSize); 
std::fread(&buffer[0], 1, buffer.size(), pFile); 
46
std::vector<char> data(buffer, buffer + size); 

James McNellis Antwort besser ist, wenn man es so tun können.

+11

Obwohl James' Antwort besseren Code ermutigt, ist dies die richtige Antwort zur Frage. Manchmal hast du einfach ein Char *. – enobayram

3

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); 
Verwandte Themen