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ść?
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ść?
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.
Czy mogę zapytać, dlaczego nie było cię tak długo? – 0x499602D2
@ 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ą. –
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! –
vector<uint8_t> *p;
string str(
p && !p->empty() ? &*p->begin() : NULL,
p && !p->empty() ? &*p->begin() + p->size() : NULL);
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. –
@ 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
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));'. –
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());
Powinieneś już wiedzieć, długość z wektora -> size(). Czy zawiera w sobie dane inne niż ASCII? – Duck
To wszystko dane ASCII. –