Ho una variabile di tipo char *:Come convertire char * in std :: vector?
// char* buffer;
// ...
fread (buffer, 1, lSize, pFile);
// ...
Come posso convertirlo in std :: vector? Il casting mi procurerà un errore.
Ho una variabile di tipo char *:Come convertire char * in std :: vector?
// char* buffer;
// ...
fread (buffer, 1, lSize, pFile);
// ...
Come posso convertirlo in std :: vector? Il casting mi procurerà un errore.
perché non utilizzare un std::vector
per cominciare:
std::vector<char> buffer(lSize);
std::fread(&buffer[0], 1, buffer.size(), pFile);
std::vector<char> data(buffer, buffer + size);
James McNellis risposta è meglio se si può fare così.
Non è possibile eseguire il cast tra un carattere * e un vettore; il cast del puntatore fa sì che il risultato abbia esattamente gli stessi byte dell'ingresso, quindi è generalmente una cattiva idea, a meno che non si stia facendo una manipolazione di bit di basso livello.
Supponendo di voler creare un vettore di caratteri, è possibile creare un nuovo oggetto vettoriale di tipo std::vector<char>
(si noti che è necessario fornire il tipo di elementi del vettore) e inizializzarlo dall'array passando l'inizio e puntatori end al costruttore:
std::vector<char> vec(buffer, buffer+lSize);
noti che il secondo argomento è un "puntatore end", molto comune in C++. È importante sottolineare che è un puntatore al carattere dopo alla fine del buffer, non l'ultimo carattere nel buffer. In altre parole, l'inizio è inclusivo ma la fine è esclusiva.
Un'altra possibilità (dal momento che si tratta di caratteri) è utilizzare un std::string
invece. Questo può o non può essere quello che vuoi (a seconda che tu stia pensando al char * come una stringa o una matrice di byte). È possibile costruire nello stesso modo:
std::string str(buffer, buffer+lSize);
o con un costruttore diverso, prendendo la dimensione come secondo argomento:
std::string str(buffer, lSize);
Anche se la risposta di James' incoraggia codice migliore, questa è la risposta corretta alla domanda A volte hai semplicemente un carattere * per cominciare. – enobayram