Ho un puntatore a un vettore di tipo uint8.Converti vettore di uint8 in stringa
Come prendere questo puntatore e convertire i dati nel vettore in una stringa completa rappresentativa del suo contenuto?
Ho un puntatore a un vettore di tipo uint8.Converti vettore di uint8 in stringa
Come prendere questo puntatore e convertire i dati nel vettore in una stringa completa rappresentativa del suo contenuto?
Si potrebbe semplicemente inizializzare il std::string
con la sequenza ottenuta dalla std::vector<uint8_t>
:
std::string str(v->begin(), v->end());
Non v'è alcuna necessità di giocare qualsiasi trucchi verificare se il std::vector<uint8_t>
è vuota: se lo è, la gamma sarà essere vuoto Tuttavia, potresti voler controllare se il puntatore è v
è nullo. Quanto sopra richiede che punti ad un oggetto valido.
Va bene se chiedo perché sei stato via così tanto tempo? – 0x499602D2
@ 0x499602D2: Vuoi dire, perché non ho risposto alle domande per un po '? È semplice: ero impegnato a cercare di far funzionare il lavoro oltre al lavoro. In questo momento sono impegnato al lavoro per lavorare oltre al lavoro. –
Sono sorpreso che questa risposta sia accettata perché non produce qualcosa di "rappresentativo del suo contenuto". Se il vettore è "{1,2,3,4,5,6,7,8,9}", il risultato sarà una stringa di caratteri non visualizzabili! –
vector<uint8_t> *p;
string str(
p && !p->empty() ? &*p->begin() : NULL,
p && !p->empty() ? &*p->begin() + p->size() : NULL);
Non è necessario eseguire alcun trucco con i vettori 'empty()': restituiranno un intervallo valido e 'std :: string' ha un costruttore che accetta una coppia di iteratori di input. –
@ DietmarKühl: Oh sì, hai ragione, ho l'abitudine di farlo perché a volte compilo con una vecchia implementazione STL che non ha questo sovraccarico basato su modelli, completamente dimenticato. – Mehrdad
sì, la vecchia implementazione RogueWave è ancora disponibile come libreria standard C++ predefinita per Sun Studio, suppongo. Se dovessi usarlo, userei effettivamente 'std :: copy (v-> begin(), v-> end(), std :: back_inserter (str));'. –
Per chi vuole la conversione essere fatto dopo viene dichiarata una stringa, è possibile utilizzare std :: string :: assegnare(), ad esempio:
std::string str;
std::vector<uint8_t> v;
str.assign(v.begin(), v.end());
Si dovrebbe già sapere la lunghezza dal vettore -> size(). Ha dati non ascii al suo interno o no? – Duck
Sono tutti dati ascii. –