2013-07-31 18 views
11

Mam wskaźnik do wektora typu uint8.Konwertuj wektor z uint8 na ciąg

Jak wziąć ten wskaźnik i przekonwertować dane w wektorze na pełny ciąg reprezentujący jego zawartość?

+0

Powinieneś już wiedzieć, długość z wektora -> size(). Czy zawiera w sobie dane inne niż ASCII? – Duck

+0

To wszystko dane ASCII. –

Odpowiedz

17

Można tylko zainicjować std::string z sekwencji uzyskanych z std::vector<uint8_t>:

std::string str(v->begin(), v->end()); 

nie ma potrzeby grać żadnych sztuczek sprawdzenie czy std::vector<uint8_t> jest pusty: czy to znaczy, że zakres będzie być pustym. Można jednak sprawdzić, czy wskaźnik ma wartość v ma wartość null. Powyższe wymaga, aby wskazywało na prawidłowy obiekt.

+0

Czy mogę zapytać, dlaczego nie było cię tak długo? – 0x499602D2

+3

@ 0x499602D2: Masz na myśli, dlaczego przez jakiś czas nie odpowiadałem na pytania? To proste: byłem zajęty próbami wykonania pracy poza pracą. Teraz jestem zajęty pracą, aby pracować poza pracą. –

+0

Jestem zaskoczony, że ta odpowiedź została przyjęta, ponieważ nie wytwarza czegoś "reprezentatywnego dla jej treści". Jeśli wektor to "{1,2,3,4,5,6,7,8,9}", twoje dane wyjściowe będą ciągiem niewyświetlanych znaków! –

0
vector<uint8_t> *p; 
string str(
    p && !p->empty() ? &*p->begin()    : NULL, 
    p && !p->empty() ? &*p->begin() + p->size() : NULL); 
+0

Nie ma potrzeby wykonywania żadnych trików z wektorami 'empty()': zwrócą one poprawny zakres, a 'std :: string' ma konstruktora pobierającego parę iteratorów wejściowych. –

+0

@ DietmarKühl: Oh tak, masz rację, mam zwyczaj robienia tego, ponieważ czasami kompiluję się ze starą implementacją STL, która nie ma tego szablonu, zupełnie zapomniałem. – Mehrdad

+0

Tak, stara implementacja RogueWave nadal jest domyślnie standardową biblioteką C++ dla Sun Studio, jak sądzę. Gdybym musiał użyć tego, użyłbym 'std :: copy (v-> begin(), v-> end(), std :: back_inserter (str));'. –

2

Dla tych, którzy chcą być konwersja odbywa po ciąg jest zadeklarowana, można użyć std :: string :: przypisać(), np:

std::string str; 
std::vector<uint8_t> v; 
str.assign(v.begin(), v.end());